你需要挂接到 Turbolinks 每次访问页面时触发的事件,而不是监听 ready
事件。
不幸的是,Turbolinks 5(Rails 5 中出现的版本)已被重写,并且与早期版本中使用的事件名称不同,导致之前提到的答案失败。现在有效的方法是监听 turbolinks:load 事件,如下所示:
$( document ).on('turbolinks:load', function() {
console.log("It works on each visit!")
})
原生JavaScript:
document.addEventListener("turbolinks:load", function() {
console.log('It works on each visit!');
});
turbo:load
用于 Turbo - Dorian在 Rails 5 中,最简单的解决方案是使用:
$(document).on('ready turbolinks:load', function() {});
不使用$(document).ready
。很好用。
ready
添加到列表中,否则函数将被执行两次。根据 https://github.com/turbolinks/turbolinks/#observing-navigation-events 的说法,您应该像这样做:
$(document).ready(function() {
$(document).on('turbolinks:load', function() {} )
})
- Xiaohui Zhang$(document).ready
被触发,至少在我的场景中,我不需要 turbolinks:load
。 - Milad.NozarijQuery.fn.ready
,然后$(document).ready
就可以在不做任何更改的情况下正常工作:jQuery.fn.ready = (fn)->
$(this).on 'turbolinks:load', fn
(对于CoffeeScript)
我使用:
$(document).on 'turbolinks:load', ->
而不是:
$(document).on('turbolinks:load', function() {...})
纯现代 JavaScript:
const onLoad = () => {
alert("works")
}
document.addEventListener("load", onLoad)
document.addEventListener("turbolinks:load", onLoad)
turbo:load
。这是我使用的解决方案,来源于这里:
install gem 'jquery-turbolinks'
add this .coffee file to your app: https://github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee
name it turbolinks-compatibility.coffee
at application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require turbolinks-compatibility
在我们等待修复这个非常酷的宝石之前,我通过修改以下内容来继续前进;
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbo:ready', -> callback($)
to:
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbolinks:load', -> callback($)
我还不清楚这个解决了什么问题,但在初步检查中似乎表现良好。
$(document).ready()
在不改变现有代码的情况下与 Turbolinks 一起工作。$(document).ready()
更改为以下之一:$(document).on('page:fetch', function() { /* your code here */ });
$(document).on('page:change', function() { /* your code here */ });
on('turbolinks:load')
,但我会使用on('ready turbolinks:load')
,否则在某些页面上会遇到一些问题。 - Cyril Duchon-Doris