Select2 JS lib在Rails应用程序上不起作用

时间:2018-08-24 17:02:31

标签: javascript ruby-on-rails jquery-select2

我得到了这个Rails应用程序,该应用程序使用了select2 JS库,但无法弄清楚为什么它没有设计我的选择列表样式。它正在生产中。

我从生产服务器的快照创建了一个登台服务器。

我已经成功运行rake assets:clobber && rake assets:precompile。我已经检查了已编译的application.js和application.css文件,并且其中包含JS代码和样式。

我可以在控制台中运行$(".classIwant").select2();并为选择列表设置样式,但是当我选择一个选项时它什么也没做。

在控制台中运行$(".classIwant").select2();后,我也收到此错误:

  

[Violation]执行JavaScript时的强制重排花费了49ms

请原谅我的无知,因为这是我第一次使用此JS库。任何帮助将非常感激。预先感谢。

更新#1: 当我将以下代码复制到控制台中并手动运行App.init();时,它将起作用。页面为什么不加载此内容。

(function() {
  window.App || (window.App = {});

  App.init = function() {
    $(".classIwant").select2();
    $('#search').on("keyup", function() {
      return searchTable($(this).val());
    });
    $('#search-list').on("keyup", function() {
      return searchList($(this).val());
    });
    $("#the_id").on('change', function(e) {
      return $(this).parent().submit();
    });
    return $('#preloader').delay(200).fadeOut();
  };

  $(document).on("page:change", function() {
    return App.init();
  });

  $(window).on("load", function() {
    $('#status').fadeOut();
    return $('#preloader').delay(200).fadeOut();
  });

}).call(this);

更新#2: 这是生产代码。有点不同。我不确定是什么导致编译器最小化生产代码并以不同方式编译它。我在控制台中使用了漂亮的打印效果,发现效果更好。有什么想法吗?

function() {
    window.App || (window.App = {}),
    App.init = function() {
        return $(".classIwant").select2(),
        $("#search").on("keyup", function() {
            return searchTable($(this).val())
        }),
        $("#search-list").on("keyup", function() {
            return searchList($(this).val())
        }),
        $("#the_id").on("change", function() {
            return $(this).parent().submit()
        }),
        $("#preloader").delay(200).fadeOut()
    }
    ,
    $(document).on("page:change", function() {
        return App.init()
    }),
    $(window).on("load", function() {
        return $("#status").fadeOut(),
        $("#preloader").delay(200).fadeOut()
    })
}
.call(this),

1 个答案:

答案 0 :(得分:0)

我发现问题是不同的红宝石,捆绑器和宝石版本。我不确定是哪个宝石引起了该问题,但是我通过以下步骤解决了该问题。您的环境可能有所不同,但这应该可以使您走上正确的路:

  1. 从生产服务器复制,一行一行地将Gemfile和Gemfile.lock复制到我的本地计算机上
  2. 在本地计算机上,我使用rvm安装了与生产相同版本的ruby(2.2.1)。
  3. 使用gem install bundler -v 1.14.0安装了捆绑程序1.14.0(1.14.0是生产服务器所具有的工具。)
  4. 跑了bundle _1.14.0_ install,它失败了,因为本地mysql是新的
  5. 由于我的mysql本地版本是新的,因此必须使用自制软件将其降级。参见Multiple MySQL Versions with Homebrew
  6. 再次成功bundle _1.14.0_ install
  7. 自从Gemfiles现在更改以来,我提交了这些更改
  8. 我git将这些更改拉到了服务器上
  9. 登台服务器ruby版本与生产版本2.2.1不匹配
  10. 必须在临时服务器上安装rvm,幸运的是,我正在使用ubuntu,所以我只使用了这些说明RVM package for Ubuntu。确保遵循终端输出。
  11. 通过rvm install 2.2.1安装了红宝石
  12. 在服务器上运行bundle install,成功。所有与之匹配的宝石。
  13. 在登台服务器上运行rake assets:clobber && rake assets:precompile
  14. 重新启动Web服务器。