现在,我正在使用form_for.selectoptions_for_select rails 帮助器来创建一个选择框,其中包含来自模型的数据。但是,我真正需要的是一个类似于HTML5引入的组合框:

<input type=text list=browsers >
<datalist id=browsers >
   <option> Google
   <option> IE9
</datalist>

是否有用于创建此类元素的rails助手?

最佳答案

不,但是设置您自己的表单构建器帮助器方法来实现这样的结果非常容易,一个简单的示例将是:

应用程序/form_builders/combobox_form_builder.rb

 class ComboboxFormBuilder < ActionView::Helpers::FormBuilder
  include ActionView::Context # for nested content_tag
  include ActionView::Helpers::FormTagHelper #for sanitize_to_id method access

  def combobox_tag(name, options, opts= {})
     @template.content_tag(:input, :name => name, :id => sanitize_to_id(name), :type => "text", :list => opts[:list_id]) do
       content_tag(:datalist, :id => opts[:list_id]) {options}
     end
  end
end

重新启动服务器后,可以通过在form_for调用中指定构建器参数来使用表单构建器实现新的组合框:
<%= form_for @foo, builder: ComboboxFormBuilder do |f| %>
    <%= f.combobox_tag(:browser, options_for_select(["Firefox", "Chrome", "IE9"]), :list_id => "list")%>
<% end %>

输出HTML:
<input type="text" name="browser" list="list" id="browser">
<datalist id="list">
  <option value="Firefox">Firefox</option>
  <option value="Chrome">Chrome</option>
  <option value="IE9">IE9</option>
</datalist>

请记住,IE和Safari均不支持HTML5数据列表。

关于ruby-on-rails - RoR 3.2.8 : Is there an HTML5 combobox helper?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13712022/

10-12 00:40