当前位置: 首页 > 知识库问答 >
问题:

Rails4:如何使用$(document).ready()和turbo-links

蓬意致
2023-03-14

我在尝试“以Rails的方式”组织JS文件时遇到了Rails4应用程序中的一个问题。他们以前分散在不同的观点。我将它们组织到单独的文件中,并用资产管道编译它们。但是,我刚刚了解到,当turbo-linking被打开时,jQuery的“ready”事件不会在随后的点击时触发。当你第一次加载一个页面时,它就可以工作了。但是当您单击一个链接时,ready(function($){中的任何内容都不会被执行(因为页面实际上不会再次加载)。

所以我的问题是:什么是正确的方法来确保jQuery事件在turbo-links打开时正常工作?您是否将脚本包装在特定于Rails的侦听器中?或者也许rails有某种魔力使它变得不必要?文档对于如何工作有点含糊,特别是通过application.js这样的清单加载多个文件。

共有2个答案

谷梁晟
2023-03-14

我刚得知另一个解决这个问题的方法。如果您加载jQuery-turbolinksgem,它会将Rails Turbolinks事件绑定到document.ready事件,这样您就可以以通常的方式编写jQuery。您只需在js清单文件中的jQuery后面添加jQuery.turbolinks(默认情况下:application.js)。

仲元凯
2023-03-14

我是这么做的...coffeescript:

ready = ->

  ...your coffeescript goes here...

$(document).ready(ready)
$(document).on('page:load', ready)

最后一行监听页面加载,这是turbo链接将触发的。

编辑...正在添加Javascript版本(每个请求):

var ready;
ready = function() {

  ...your javascript goes here...

};

$(document).ready(ready);
$(document).on('page:load', ready);

Rails5(Turbolinks5)page:load变为Turbolinks:load,甚至会在初始加载时激发。所以我们可以只做以下操作:

$(document).on('turbolinks:load', function() {

  ...your javascript goes here...

});
 类似资料:
  • 问题内容: Turbolink可以防止正常事件在除初始加载之外的所有页面访问中触发链接答案中的解决方案均不能与Rails 5一起使用。像以前的版本一样,如何在每次访问页面时运行代码? 问题答案: 无需监听事件,而是需要每次访问页面时都挂接到Turbolinks触发的事件。 不幸的是,Turbolinks 5(Rails5中出现的版本)已被重写,并且没有使用与以前版本的Turbolinks相同的事件

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

  • 问题内容: 我正在使用jQuery在UpdatePanel中的元素上附加一些鼠标悬停效果。事件绑定在中。例如: 当然,这在第一次加载页面时效果很好,但是当UpdatePanel执行部分页面更新时,它不会运行,并且鼠标悬停效果在UpdatePanel内部不再起作用。 不仅在首页加载时,而且在每次UpdatePanel触发部分页面更新时,建议在jQuery中进行接线的推荐方法是什么?我应该使用ASP.

  • 问题内容: 是以下简写吗? 我看到这种模式使用了很多,但是我找不到任何引用。如果它是的简写,是否有任何特定原因可能不起作用?在我的测试中,它似乎总是在ready事件之前触发。 问题答案: 的简写是(函数在哪里)。看这里。 您问题中的代码与无关。相反,它是一个以jQuery对象作为参数的立即调用的函数表达式(IIFE)。其目的是将变量的范围至少限制在其自己的块中,以免引起冲突。您通常会看到jQuer

  • 问题内容: vs 和我应该以表格或新方式书写的区别是什么? 如果我加载了Google api是更好的方法?还是同一件事? 我也看到人们使用 有人可以帮我,我迷路了。当我不知道所写的代码时,我会烦扰我。我想我应该阅读一下图书馆。全部都定义为同一件事吗? 问题答案: 两种方式是等效的,我个人更喜欢第二种方式,这只是准备文档的捷径。 关于构造,您实际上不需要使用运算符,如果不需要,jQuery会在内部使

  • 问题内容: 题: 如果我链接两个都带有函数的JavaScript文件,会发生什么情况?一个会覆盖另一个吗?还是两者都被叫? 例如, jquery1.js: jquery2.js: 我相信最好的方法是将两个调用简单地合并为一个,但是在我的情况下这不太可能。 问题答案: 所有人都会被执行, 并且在首次调用的基础上运行!! 演示如您所见,它们不会互相替换 我还要提一件事 代替这个 您可以使用此快捷方式