here および here で説明したように、Turbolinksは、初期ロード以外のすべてのページアクセスで通常の$(document).ready()
イベントが発生するのを防ぎます。ただし、リンクされた回答のソリューションはRails 5では機能しません。以前のバージョンのように、各ページ訪問でコードを実行するにはどうすればよいですか?
ready
イベントをリッスンするのではなく、ページにアクセスするたびにTurbolinksによって起動されるイベントにフックする必要があります。
残念ながら、Turbolinks 5(Rails 5に表示されるバージョン)は書き直されており、Turbolinksの以前のバージョンと同じイベント名を使用していないため、上記の回答が失敗します。現在機能しているのは、次のような turbolinks:load イベントをリッスンすることです。
$( document ).on('turbolinks:load', function() {
console.log("It works on each visit!")
})
ネイティブJS:
document.addEventListener("turbolinks:load", function() {
console.log('It works on each visit!');
});
これが私の解決策です。jQuery.fn.ready
をオーバーライドすると、$(document).ready
は変更なしで機能します。
jQuery.fn.ready = (fn)->
$(this).on 'turbolinks:load', fn
Rails 5で最も簡単な解決策は以下を使用することです:
$(document).on('ready turbolinks:load', function() {});
$(document).ready
の代わり。魔法のように機能します。
here から、私のために働く解決策があります:
インストールgem 'jquery-turbolinks'
この.coffeeファイルをアプリに追加します。 https://github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee
turbolinks-compatibility.coffeeという名前を付けます
application.jsで
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require turbolinks-compatibility
この本当にすばらしいgemの修正を待っている間、私は次を修正することで前進することができました。
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbo:ready', -> callback($)
に:
addCallback: (callback) ->
if $.turbo.isReady
callback($)
$document.on 'turbolinks:load', -> callback($)
これで何が解決しないのかはまだわかりませんが、最初の検査ではうまくいくようです。
(coffeescriptの場合)
私は使用します:$(document).on 'turbolinks:load', ->
代わりに:$(document).on('turbolinks:load', function() {...})