【问题标题】:Multiselect in rails导轨中的多选
【发布时间】:2014-01-28 15:39:19
【问题描述】:

我正在尝试在我的 rails 应用程序中使用 bootstrap multiselect

在我使用它的视图中,我使用它初始化插件

<script type="text/javascript">
  $(document).ready(function() {
    $('.multiselect').multiselect();
  });
</script>

它似乎使用演示 html 工作:

<select class="multiselect" multiple="multiple">
  <option value="cheese">Cheese</option>
  <option value="tomatoes">Tomatoes</option>
  <option value="mozarella">Mozzarella</option>
  <option value="mushrooms">Mushrooms</option>
  <option value="pepperoni">Pepperoni</option>
  <option value="onions">Onions</option>
</select>

这很好,但我无法让它与我的 rails 选择代码一起使用。这是我的尝试:

<%= f.fields_for :sizes do |size_fields| %>
      <%= size_fields.label :scale_id, simple_pluralize(@miniset.scales.count, 'Scale') %>
      <%= hidden_field "Set Scale", @miniset.sizes %>
      <div class = "form-inline"><%= size_fields.select :scale_id, options_from_collection_for_select(Scale.all, :id, :name, @miniset.scales.map(&:id)), {include_blank: '', :class => 'multiselect', :multiple => true} %>
<% end %></div>

我认为问题在于:class =&gt; 'multiselect', :multiple =&gt; true 调用 JQuery 的方式与&lt;select class="multiselect" multiple="multiple"&gt; 不同,但我想一定有办法让这项工作发挥作用。非常感谢任何帮助。

编辑:我应该补充一点,我的选择已显示,它只是没有显示为预期的智能多选之一,如 here 所示。

编辑 2: 浏览器显示的选择代码是:

<label for="miniset_sizes_attributes_0_scale_id">Scales</label>
      <input id="Set_Scale_#&lt;ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Size:0x007fcf644c0c08&gt;" name="Set Scale[#&lt;ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Size:0x007fcf644c0c08&gt;]" type="hidden" />
      <div class = "form-inline"><select id="miniset_sizes_attributes_0_scale_id" name="miniset[sizes_attributes][0][scale_id]"><option value=""></option>
<option value="1">28mm</option>
<option value="2">54mm</option>
<option value="3">6mm</option>
<option value="4">15mm</option>
<option value="5">1/76</option></select>
      </div>

那里没有多选或多选的迹象。嗯。

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-4 bootstrap-multiselect


    【解决方案1】:

    您的选择字段选项是由此生成的:

    options_from_collection_for_select(Scale.all, :id, :name, {:selected => @miniset.scales.map(&:id)})
    

    所选值(在您的情况下为 id)不应该作为散列传递,而是作为数组传递:

    options_from_collection_for_select(Scale.all, :id, :name, @miniset.scales.map(&:id))
    

    此外,您将 classmultiple 属性作为选择选项的一部分传递 - 但这些不是受支持的选项,并且缺少的类导致 jquery 选择器找不到您的选择字段。您想要的是将它们作为标准 HTML 选项 传递,这需要第二个哈希值。这是您应该使用的完整的 select 构建器:

    size_fields.select :scale_id, 
                       options_from_collection_for_select(Scale.all, :id, :name, @miniset.scales.map(&:id)), 
                       {include_blank: ''}, 
                       {class: 'multiselect', multiple: true}
    

    【讨论】:

    • 谢谢。我已经交换了该代码,但没有明显的效果。这只是一个不相关的修复还是应该解决我的上述问题?
    • 您能否准确说明您期望什么工作以及您如何看待它不工作?
    • 你能发布在浏览器中为这个选择字段呈现的 HTML 吗?另外,您确定该脚本是作为初始 HTML 的一部分读取的(而不是由 AJAX 加载的)吗?
    • 我已经发布了上面的 HTML。至于你问题的第二部分,我不确定。我知道我在 application.js 和 application.css 中添加了一条 REQUIRE 行,这无疑会发挥一些作用。
    • @WorldOfProper - 更新以解释正在发生的事情以及如何解决此问题。
    猜你喜欢
    • 2014-06-27
    • 2010-12-07
    • 2011-06-25
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多