在Rails 5中使用sortable.js和turbolinks

时间:2017-07-10 20:00:19

标签: javascript ruby-on-rails turbolinks

我有一个Rails 5.1应用程序,我使用sortable.js中的https://www.kryogenix.org/code/browser/sorttable/库来对表进行一些简单的客户端排序。

我遇到的问题是,当页面首次加载时,表格排序不起作用。 (它根本没有响应。)如果你然后手动重新加载页面(cmd-R或等效的),那么它确实有效。

经过一番搜索,我认为问题是由turbolinks造成的。像这样的帖子和其他人建议如何修改JS代码来解决它:Rails javascript only works after reload

要引用该页面上的答案,您必须通过执行以下操作来告知加载turbolink:

document.addEventListener("turbolinks:load", function() {
  my_func();
})

但是,我不是JS专家,因此有点厌恶在sortable.js代码中喋喋不休。我正在寻找帮助解决问题的最小侵入方式。

1 个答案:

答案 0 :(得分:1)

为了未来的Google员工发布有效的解决方案。

我必须做两件事才能让它发挥作用:

1:注释掉init函数顶部的行,阻止它多次运行。所以sorttable.js中我的init函数的顶部如下所示:

    sorttable = {
      init: function() {
        // Had to comment these top to out to get things to work with turbolinks
        // quit if this function has already been called
        //if (arguments.callee.done) return;
        // flag this function so we don't do the same thing twice
        //arguments.callee.done = true
  1. 将此代码添加到文件中的其他位置。 (我个人在说出" window.onload = sorttable.init;"

    之后添加了它。
    document.addEventListener("turbolinks:load", function() {
      sorttable.init();
    })