我在输入字段中尝试使用class="text"
时使用自定义包装器:在simple_form 2.0.0.rc中提示
config.wrappers :hinted do |b|
b.use :input, :class => "text"
end
但输出没有那个类,我试过
:wrap_with => {:class => 'text'}
无济于事
有谁知道这是怎么做的?
谢谢!
答案 0 :(得分:34)
使用:input_html有效。它有点笨重。
= f.input :email, :input_html => { :class => 'foo' }
您还可以在所有表单元素上设置所有输入:
simple_form_for(@user, :defaults => { :input_html => { :class => "foo" } })
但正如您所期望的那样,这适用于所有事情。
您可以创建自定义表单元素:
# app/inputs/foo_input.rb
class FooInput < SimpleForm::Inputs::StringInput
def input_html_classes
super.push('foo')
end
end
// in your view:
= f.input :email, :as => :foo
请参阅:https://github.com/plataformatec/simple_form/wiki/Adding-custom-input-components
您还可以创建自定义表单构建器:
def custom_form_for(object, *args, &block)
options = args.extract_options!
simple_form_for(object, *(args << options.merge(builder: CustomFormBuilder)), &block)
end
class CustomFormBuilder < SimpleForm::FormBuilder
def input(attribute_name, options = {}, &block)
options[:input_html].merge! class: 'foo'
super
end
end
答案 1 :(得分:17)
目前无法做到这一点。如果需要,您可以使用defaults
这样的选项。
<%= simple_form_for(@user, :defaults => { :input_html => { :class => "text" } }) do %>
<%= f.input :name %>
<% end %>
答案 2 :(得分:12)
此功能即将合并为主人(2012年10月):
https://github.com/plataformatec/simple_form/pull/622
然后你可以做这样的事情直接在输入字段上添加HTML属性:
SimpleForm.build :tag => :div, :class => "custom_wrapper" do |b|
b.wrapper :tag => :div, :class => 'elem' do |component|
component.use :input, :class => ['input_class_yo', 'other_class_yo']
component.use :label, :"data-yo" => 'yo'
component.use :label_input, :class => 'both_yo'
component.use :custom_component, :class => 'custom_yo'
end
end
答案 3 :(得分:0)
我遇到了类似的问题,但似乎此功能(input_class之一)在3.0.0版本之后合并。
所以我尝试制作一个猴子补丁,至少支持config.input_class = 'foo'
代码
我的目的不是做一个很棒的猴子补丁(实际上我喜欢这篇文章here这样做 - 猴子补丁),这只是一个想法,但它有效,现在我正在与SimpleForm v2.1.3和Bootstrap 4 - alpha版本(最后一个在这里并不重要,但它仅用于信息目的)
这是猴子补丁的代码:
module SimpleForm
mattr_accessor :input_class
@@input_class = nil
end
module SimpleForm
module Inputs
class Base
def html_options_for(namespace, css_classes)
html_options = options[:"#{namespace}_html"]
html_options = html_options ? html_options.dup : {}
css_classes << html_options[:class] if html_options.key?(:class)
css_classes << SimpleForm.input_class if namespace == :input && SimpleForm.input_class.present?
html_options[:class] = css_classes unless css_classes.empty?
html_options
end
end
end
end
现在你可以这样做:
SimpleForm.setup do |config|
# ...
config.input_class = 'foo'
#...
end
答案 4 :(得分:-2)
您可以在simple_form初始值设定项中设置:
config.input_class =&#39; foo&#39;
它对我有用:)