0

我的应用程序有两部分似乎需要我在不同的点加载我的 javascript。

  1. 当我放置<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' <head></head>.
  2. Shubox(用于上传照片的 js 库)在我<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' 之前放置时工作</body>

当 javascript 在另一个需要的地方加载时,两者都不起作用。因此,如果我将 javascript 行放在正文的末尾,omniauth 不起作用。

如果需要,我可以提供更多信息。先感谢您。

应用程序.js

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

应用程序.html.erb

<html>
  <head>
     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  </head>
    <body data-shubox="<%= Rails.application.credentials.dig(:aws, :secret_access_key) %>">
    <% if flash.any? %>
      <% flash.each do |key, value| -%>
        <section class="flash flash__<%= key %>"><%= value.html_safe %></section>
      <% end -%>
    <% end %>
    <%= yield %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </body>
</html>
4

2 回答 2

0

packs如果您在不同的地方需要它们,您可以随时创建 2 :

javascript/packs/the_one_with_turbolink.js javascript/packs/the_one_with_shubox.js

那么你可以做

javascript_pack_tag :the_one_with_turbolinks

javascript_pack_tag :the_one_with_shubox

于 2021-05-08T22:08:44.177 回答
0

由于 Turbolinks,您的 application.js 需要在 head 标签中,否则会被评估两次。这可能会导致在初始化时期望加载 DOM 的库出现问题——我认为这是 shubox 的问题。

所以你应该在你的 application.js 中加入这样的东西(如果你使用的是 Turbolinks 5,对于早期版本,事件被调用page:load

$(document).on('turbolinks:load',() => {
   new Shubox('#avatar', { key: "abcde-qwerty-12345" })
   }
);
于 2021-05-08T21:28:28.360 回答