2016-06-01 5 views
0

Я пишу пользовательскую оболочку для простой формы:простая форма добавить класс к окружающему DIV

## Inputs 
b.wrapper tag: :div, class: 'col-lg-4 input-group' do |component| 
    component.use :input, class: 'form-control' 
    component.wrapper tag: :span, class: 'input-group-addon' do |icon| 
    icon.wrapper :icon, tag: :i do 
    end 
    end 
end 

генерирует HTML:

<div class="string optional q_post_date_gteq"> 
<div class="col-lg-4 input-group"> 
    <input class="string optional datepicker form-control" placeholder="Start" type="text" name="q[post_date_gteq]" id="q_post_date_gteq"> 
    <span class="input-group-addon"><i class="icon-calendar"></i></span> 
</div> 
</div> 

<div class="string optional q_post_date_gteq">, кажется, генерироваться автоматически. Я хочу добавить к нему класс, как это возможно?

+0

Вы пытались передать эту опцию 'f.input' -' wrapper_html: {class: 'your-class'}} ' –

+0

Вы также можете сделать, когда вы определяете:' config.wrappers: your_wrapper_name, class: ' ваш класс 'do | b | ... 'См. [Docs] (https://github.com/plataformatec/simple_form/wiki/Custom-Wrappers) –

+0

@PetrGazarov благодарит! вы могли бы написать ответ, чтобы я мог его принять? – Deekor

ответ

2

Простая форма генерирует обертку div вокруг ввода и метки по умолчанию. Есть два способа, которыми я знаю, настроить параметры html для вашей пользовательской оболочки.

1. Вы можете передать wrapper_html опцию в виде строителя в шаблоне:

f.input :some_property_name, wrapper_html: { class: 'your-class' } 

2. Pass опции класс wrappers при определении пользовательской оболочки:

config.wrappers :your_wrapper_name, class: 'your-class' do |b| ... 

Там некоторые отличные документы об определении пользовательских оберток, если вам нужна дополнительная помощь! https://github.com/plataformatec/simple_form/wiki/Custom-Wrappers

+0

Я всегда забывал об этом атрибуте 'wrapper_html' на входе, и я всегда возвращаюсь к этому ответу. : D – Erowlin

0

Если вы не можете найти ответ, используя только рубин, это может сделать трюк:

$(document).ready(function() { 
    $(".q_post_date_gteq").addClass("..."); 
}); 

EDIT:

Чтобы ответить на комментарии: добавить «обертку», так что у вас есть что-то вроде это

<div class="simple-form-wrapper"> 
    <div class="string optional q_post_date_gteq"> 
    <div class="col-lg-4 input-group"> 
     <input class="string optional datepicker form-control" placeholder="Start" type="text" name="q[post_date_gteq]" id="q_post_date_gteq"> 
     <span class="input-group-addon"><i class="icon-calendar"></i></span> 
    </div> 
    </div> 
</div> 

И теперь, JQuery часть становится:

$(document).ready(function() { 
    $(".simple-form-wrapper").children.first.addClass("..."); 
}); 
+0

Это хорошая идея. Я хотел бы знать рубиновый путь, но это сработает, если все остальное не удастся. Благодарю. – Deekor

+0

Я не думаю, что это надежный. Документации по этому классу нет, поэтому я не удивлюсь, если он изменится динамически или в следующей версии. –

+0

@PetrGazarov Я отредактировал свой ответ, он должен работать независимо от изменений –