2

在 Rails 中使用 jQuery 就绪事件时,我注意到一些奇怪的事情。如果将处理程序添加到该<head>部分中,直接在脚本标记中或包含在使用的资产管道文件中<%= javascript_include_tag ...,它将仅在第一个页面请求上执行,而不是在后续请求上执行。也就是说,加载/刷新页面的显式浏览器操作将执行它,但通过点击链接触发的新页面视图不会。

另一方面,如果它包含在 中<body>,它会在每次页面查看时触发 - 正如您所期望的那样。

<head>
<script>
jQuery(document).ready(function(){
    console.log('READY in head'); // Fires on first page load only
});
</script>
</head>

<body>
<script>
jQuery(document).ready(function(){
    console.log('READY in body'); // Fires every time
});
</script>
</body>

真的很迷茫。我在我所有的 Rails 应用程序中都看到了它,但不明白 Rails 是如何影响这一点的,因为 jQuery 是一种客户端技术?

4

2 回答 2

3

来自RailsApps 项目

随着新的 Turbolinks 功能,Rails 资产管道在 Rails 4.0 中将变得更加重要。Turbolinks 通过保持当前页面实例处于活动状态并仅替换页面 BODY(加上 HEAD 中的标题)来提高性能。只要页面之间的 HEAD 元素相同,Turbolinks 机制就可以提供其“涡轮”速度提升。这增加了避免在特定页面上出现任何额外脚本标签的重要性。

于 2013-07-19T13:09:04.323 回答
1

如您所说,使用 AJAX(或 turbolinks)实际上不会加载新页面,而是将其插入到 dom 中。因此,就绪事件不会触发。:)

于 2013-07-19T13:12:58.210 回答