我有一个 Rails 5.1 应用程序,我在其中使用 sortable.js来自 https://www.kryogenix.org/code/browser/sorttable/ 的图书馆为了对表进行一些简单的客户端排序。
我遇到了一个问题,当页面首次加载时,表格排序不起作用。 (它只是根本没有响应。)如果您随后手动重新加载页面(cmd-R 或等效命令),那么它确实有效。
经过一番查找,我认为问题出在turbolinks。像这样的帖子,还有其他人建议如何修改 JS 代码来解决它:Rails javascript only works after reload
要引用该页面上的答案,您必须通过执行此操作告诉 turbolinks 加载:
document.addEventListener("turbolinks:load", function() {
my_func();
})
但是,我不是 JS 专家,所以有点讨厌在 sortable.js 代码中胡闹太多。我正在寻求有关解决问题的侵入性最小的方法的帮助。
最佳答案
为了 future 的 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
将此代码添加到文件的其他位置。 (我个人在“window.onload = sorttable.init;”这一行之后添加了它
document.addEventListener("turbolinks:load", function() { sorttable.init(); })
关于javascript - 在 Rails 5 中使用 sortable.js 和 turbolinks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020599/