Rails 6 和 Turbolinks:在加载新的 \<head> 脚本之前触发 'turbolinks:load'

Ste*_*son 5 javascript ruby-on-rails turbolinks

我有一个 Rails 6 项目。当使用 Turbolink 加载页面时,turbolinks:load事件会在 <head> 脚本合并并执行之前触发。这些脚本中的事件监听器永远不会被执行,因为它们是在事件发生后添加的。

例如,布局的 <head> 部分包含以下内容的页面:

    = javascript_pack_tag 'application', 'data-turbolinks-track': 'reload', defer: 'defer'
    = yield :extra_head
Run Code Online (Sandbox Code Playgroud)

页面顶部是这样的:

- content_for :extra_head do
  = javascript_pack_tag 'club_edit'
Run Code Online (Sandbox Code Playgroud)

生成这个 html:

<script src="/packs/js/application-629a480faedfc40e8948.js" data-turbolinks-track="reload" defer="defer"></script>
<script src="/packs/js/club_edit-8d7d256609de3b852df1.js"></script>
Run Code Online (Sandbox Code Playgroud)

club_edit.js 文件添加一个侦听器来turbolinks:load调用名为init()

document.addEventListener('turbolinks:load', init);
Run Code Online (Sandbox Code Playgroud)

当我“正常”加载页面时,它会按预期工作并且该init()函数会被调用。但是,如果我从 Turbolinks 链接加载它,它会执行 xhr 调用,并turbolinks:load在添加侦听器之前触发事件。

我应该做什么来确保init()函数以任何一种方式被调用?