我将SimpleForm与Zurb Foundation 5一起使用(设置如中所述https://github.com/plataformatec/simple_form#zurb-基础-5)。
在我的视图中,我可以显示表单字段的Foundation工具提示(例如"键入您的姓名"),方法是:
= f.input :name, input_html: {title: 'Type your name.', data: {tooltip: ''}}
这很好,但这是太多的语法开销。如何配置SimpleForm,以便在视图中使用以下短语法来显示Foundation工具提示:
= f.input :name, hint: 'Type your name.'
(我已经读过了https://stackoverflow.com/a/28461799/4096216但它没有帮助,因为我不想要自定义工具提示,但我更喜欢使用Foundation本身提供的工具提示,请参阅http://foundation.zurb.com/docs/components/tooltips.html)。
作为一种变通方法,我编写了一个视图助手
def hint(text)
{input_html: {title: text, data: {tooltip: ''}}}
end
这允许我显示一个工具提示:
= f.input :name, hint('Type your name.')
尽管如此,如果我能写下:,感觉会更好/更干净
= f.input :name, hint: 'Type your name.'
欢迎提出任何建议!:)
我对它进行了研究,最终实现了一个自定义组件,如SimpleForm wiki中简要描述的那样。
在config/initializers/simple_form_foundation.rb
中,我添加了
module SimpleForm
module Components
module Tooltips
def tooltip(wrapper_options=nil)
@tooltip ||= begin
hint = options[:hint]
text =
if hint.is_a?(String)
html_escape(hint)
else
translate_from_namespace(:hints)
end
if text
<<-HTML
<span data-tooltip
aria-haspopup='true'
class='has-tip'
data-disable-hover='false'
tabindex=1
title='#{text}'>?</span>
HTML
end
end
end
def has_tooltip?
options[:hint] != false && tooltip.present?
end
end
end
end
SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Tooltips)
然后我可以在同一文件的设置部分中使用(为了简洁起见,省略了一些代码):
SimpleForm.setup do |config|
...
config.wrappers :vertical_form, ... do |b|
...
b.use :tooltip
end
...
附言:我没有费心使用SimpleForm的构建器来返回除了一块HTML之外的任何东西,这给了我一个机会来获取它并向我展示如何做得很好。
PPS:我的例子是基于最近的Foundation6。