" selectize-下拉含量"动态创建新div

时间:2017-11-27 07:27:39

标签: jquery ruby-on-rails selectize.js cocoon-gem

我使用Rails,JQuery,Cocoon和Selectize在页面上创建表单。该应用程序用于为餐厅创建菜单。

/menu/new为您提供了一个页面,您可以在其中输入菜单名称(例如" Lunch")以及一个显示"添加菜单项"的按钮,以及"创建菜单"按钮。我们的想法是,当您单击以添加菜单项时,将显示一个表单,其中包含“类别”,“项目名称”,“价格”和“说明”字段。您可以根据需要添加任意数量的菜单项。

我的问题不是功能之一,因为一切正常。创建操作将根据需要创建菜单,菜单项和菜单项类别。我的问题是Selectize。

点击"添加新菜单项"为我提供了一个菜单项的表单,就像我之前提到的那样,以及那种形式"类别"是以前创建的类别的下拉列表。问题是,列表一次只填充页面上的一个表单:

Like so

如您所见,只有最新的表单显示“类别”下拉列表中的任何数据。页面上显示的前两个现在是空白的。数据仍然存在,但不可见。我无法弄清楚如何获取以前的菜单项表单来显示类别列表。

这纯粹是装饰性的,因为如果我点击“创建菜单”,数据将会正确保存。但是,如果要在单击以添加新菜单项后编辑类别,确实会让您感到痛苦。

这是JQuery:

$('form').on('cocoon:after-insert', function() { $('.selectize').selectize(); });

和表格:

<div class="field"> <%= f.select :category_id, Category.all.pluck(:name, :id), {}, { class: "selectize" } %> </div>

我希望这很清楚,不知道如何用更少的话来解释它。提前谢谢!

1 个答案:

答案 0 :(得分:0)

Imho连续拨打$('.selectize').selectize();将“打破”之前选择性选择框。所以我假设在构建你的视图时,你会调用每个选择框尝试该命令,这实际上只会使最后一个处于“良好”状态。

因此,您必须确保在创建表单时只调用一次。例如。类似于menus.js.coffee

的内容
 $(document).on 'turbolinks:load', () ->
   $('.selectize').selectize()

然后在你的cocoon回调做类似下面的事情,只考虑新插入的html(而不是选择 所有选择框):< / p>

$('form').on 'cocoon:after-insert', (e, inserted_item) ->
  $(inserted_item).find('.selectize').selectize()