simple_form:true或只读:无添加禁用禁用表单真实的每个输入

问题描述:

我有一个大 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代码整个表单属性快?

只是一个建议,你可以通过设置$('.form input').prop('disabled', true);来实现使用jquery的行为,其中form是你的表单类。

您可以创建禁止这样的输入自定义包装:

# 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

滑稽:

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

生成 '禁用' 为元素类。

​​

不这样做:)