rails中的select元素没有应用select2,哪里找缺失的link?

Select2 is not applied to select element in rails, where do I find the missing link?

到目前为止对我有帮助的页面:

预期结果:

实际结果:

到目前为止我已完成的步数:

  1. 将其添加到 gem,进行捆绑安装。
  2. 像这样添加//= require select2

:

//= require jquery
//= require jquery_ujs
//= require bootstrap/modal
//= require turbolinks
//= require select2
//= require_tree .

  1. 将要求 select2 和要求 select2-bootstrap 添加到 application.css

:

*= require select2
 *= require select2-bootstrap
 *= require_tree .
 *= require_self
 */
  1. 在我的 name.html.erb 中有:

:

<%= f.label :tag_list, "Topics" %>
<%= f.select(:tag_list, Tag.all.order(:name).collect { |a| a.name }, {}, id: "tag_list1", label:'Tags', :multiple => true)%>

我创建了一个 Tag.rb(数据保存到数据库): class Tag < ApplicationRecord validates_presence_of :name end

  1. 现在是最后一步(据我了解),我将功能应用于元素(将代码添加到 //= require_tree . 下面的 application.js): $( "#dropdown" ).select2({ theme: "bootstrap" });

将此更改为:

$( "#tag_list1" ).select2({ theme: "bootstrap" });

控制台: Uncaught TypeError: $(...).select2 is not a function

我解决了这个问题:

(function($){
  $(document).on('ready', function(){
      $("#tag_list1").select2({
        theme: "bootstrap",
        tags: true
      });
  });
}(jQuery));

预期结果:

实际结果:

请指教


更新 1 这是 html 输出:

<input name="item[tag_list][]" type="hidden" value="">
<select id="tag_list1" label="Tags" multiple="multiple" name="item[tag_list][]">
  <option value="12">dev tool</option>
</select>

正在查看 DOM。您应该看到以下加载顺序:jQuery、select2,然后是您的 js 文件。 (来源:)

而不是 ready 添加 turbolinks:load

创建一个名为 /assets/javascripts/select2.js 的文件:

//= require select2-full

$(document).on('turbolinks:load', function(){
  $("#tag_list1").select2({
    theme: "bootstrap",
    tags: true,
    placeholder: "Max 5 topics"
  });
});

预期结果:您 select2 添加到您的元素并具有所有功能。