Javascript 使用 turbolink 5.2.0 时方法触发两次

Javascript method firing twice when using turbolink 5.2.0

问题:

我有一个基于 Spree 3.7 和 Rails 5.2 构建的电子商务应用程序,现在我正面临 turbolink(5.2.0 版)问题,我在其中实现了 javascript 添加项目到购物车,但 js 方法触发两次,类似的商品被添加到购物车两次。

我在 head 标签中包含了以下 js-

<script>
  <%= javascript_include_tag 'spree/frontend/all' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</script>

我已尝试 'data-turbolinks-track':'true/false' 但我的问题在删除后得到解决

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>.

我从“https://github.com/turbolinks/turbolink”中了解到 turbolink。根据我的说法,turbolink 正在加载 javascript 方法两次。

有什么解决办法的建议吗?

评论后是我的application.js文件

// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require activestorage
//= require turbolinks
//= require cable
//= require jquery-ui/widgets/sortable

//= require wishlist
//= require product
//= require cart

根据您的评论,您可能在本地有两个版本的编译资产。尝试 运行 rake assets:clobber 清除额外的资产。

所以基本上我能够解决问题,根据 Turbolink 我们的 javascript 应该包含在

document.addEventListener("turbolinks:load", function () { ... }

我们的 addToCartForm 等疯狂功能适用于 $( document ).ready()

所以我重写了那些函数并封装在 turbolinks:load 中,现在一切正常。