Rails 4:如何在Turbo-Links中使用$ {document).ready()

尝试以“ rails方式”组织JS文件时,我在Rails 4应用程序中遇到了问题。它们以前分散在不同的视图中。我将它们组织到单独的文件中,并通过资产管道进行编译。但是,我刚刚了解到,在打开Turbo链接时,jQuery的“就绪”事件不会在随后的点击中触发。首次加载页面时,它可以工作。但是,当您单击链接时,其中的任何内容ready( function($) {都不会执行(因为该页面实际上不会再次加载)。好的解释:在这里

所以我的问题是:在涡轮链接打开时,确保jQuery事件正常工作的正确方法是什么?您是否将脚本包装在特定于Rails的侦听器中?或者,也许rails具有某种使它不必要的魔力?该文档对如何工作有点含糊不清,尤其是在通过清单(如application.js)加载多个文件方面。

飞云达蒙2020/03/16 15:02:58

以上都不适合我,我通过不使用jQuery的$ {document).ready来解决此问题,而是使用addEventListener来解决。

document.addEventListener("turbolinks:load", function() {
  // do something
});
神无蛋蛋2020/03/16 15:02:58

您必须使用:

document.addEventListener("turbolinks:load", function() {
  // your code here
})

来自turbolinks doc

ADavaid2020/03/16 15:02:56

我刚刚了解了解决此问题的另一种选择。如果加载jquery-turbolinks宝石它将绑定Rails的Turbolinks事件的document.ready事件,这样你就可以用通常的方式写你的jQuery。您只需在js清单文件(默认为:)jquery.turbolinks之后添加即可jqueryapplication.js