使用Turbolink 5.2.0时,JavaScript方法会触发两次

时间:2019-04-15 14:02:43

标签: ruby-on-rails spree turbolinks

问题:

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

我已将以下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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

所以基本上我能够解决这个问题,根据Turbolink的说法,我们的javascript应该包装在

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

我们的狂欢功能(如addToCartForm等)可在$( document ).ready()

上运行

所以我已经覆盖了这些功能,并包装在turbolinks:load中,现在一切正常。