我想为我的应用创建一个包装器,但不同类型的html应该是不同的。所以,我可以写
= simple_for_for @task, wrapper: :mine_special do |f|
= f.input :first_attr, type: :sring
= f.input :second_attr, type: :boolean
所以,我的初始值设定项将包含string
和&的定义。 boolean
种类:
config.wrappers :mine_special, types: [:boolean] do |b|
# configs here for check box
end
config.wrappers :mine_special, types: [:string] do |b|
# configs here for text field
end
我该怎么做?
答案 0 :(得分:0)
简而言之
我能想到的最好的解决方案就是以不同的方式命名包装器:
config.wrappers :mine_special_boolean
config.wrappers :mine_special_string
它很好地遵循simple_form语义,并且不需要记住传递type
选项。
<强>解释强>
当您在模板中传递wrapper: :mine_special
选项时,已经运行了简单的表单初始化代码,因此您不能简单地在包装块中插入if语句。从模板调用包装器时,它会将您的选项与您在初始化程序中定义的选项合并。
我可以想象一种覆盖SimpleForm::FormBuilder中某些方法的方法,根据您传入的type
选项路由您的包装调用,但那时我可能会想知道它是否&# 39;值得复杂。