2014-12-04 61 views
4

我有一個大 simple_form形式需要被啓用禁用取決於在窗體的部分被加載領域。simple_form:true或只讀:無添加禁用禁用表單真實的每個輸入

我的問題是:你怎麼快速禁止任何形式的輸入使用simple_form傭工/包裝?

Simple Form's documentation解釋如何disabled: true可以用來禁用單一的輸入場

<%= simple_form_for @user do |f| %> 
    <%= f.input :username, disabled: true %> 
    <%= f.button :submit %> 
<% end %> 

但文檔是我怎麼能通過simple_form助手禁用整個形式,而無需重複不太清楚disabled: true字面上每個表單輸入。

我嘗試將disabled: truereadonly: true傳遞給simple_form的:wrapper_mappings選項,但那不起作用。


例如代碼:

我經由部分負荷的形式,以限定顯示simple_form變量。這工作:

#user/show.html.erb: 
<%= render partial: 'shared/form', locals: {questionnaire: @questionnaire, readonly_state: true, disabled_state: true, bootstrap_form_class: 'form-horizontal'} %> 

然而, readonly_state disabled_state沒有工作,除非我把它們傳遞給每一個表單輸入:

# shared/_form.html.erb 
<%= simple_form_for(@questionnaire, :html => {:class => bootstrap_form_class}, 

:wrapper_mappings => {check_boxes: :vertical_radio_and_checkboxes, file: :vertical_file_input, 
boolean: :vertical_boolean }) do |f| %> 

    <%= f.input :username, disabled: disabled_state, hint: 'You cannot change your username.' %> 
    <%= f.input :email, disabled: disabled_state %> 
    <%= f.input :city, disabled: disabled_state %> 
    <%= f.input :country, disabled: disabled_state %> 
    . . . 
    <%= f.button :submit %> 
<% end %> 

你可以很快地看到重複這得到與一個大的形式。

我如何切換禁用只讀形式跨使用DRY代碼整個表單屬性快?

回答

3

只是一個建議,你可以通過設置$('.form input').prop('disabled', true);來實現使用jquery的行爲,其中form是你的表單類。

4

您可以創建禁止這樣的輸入自定義包裝:

# config/initializers/simple_form.rb 
config.wrappers :disabled_form do |b| 
    b.use :input, disabled: true, readonly: true 
end 

而且形式使用:

<%= simple_form_for @model, wrapper: :disabled_form %> 
    <%= f.input :field %> 
    ... 
<% end %> 

根據不同的輸入形式的金額,你可能需要創建更多自定義包裝並在禁用的表單中使用wrapper_mapping

3

滑稽:

<%= f.input :username, disabled: true %> 

生成 '禁用' 爲元素類。

​​

不這樣做:)