Javascript метод запускается дважды при использовании turbolink 5.2.0 - PullRequest
1 голос
/ 15 апреля 2019

Проблема:

У меня есть приложение для электронной коммерции, построенное на Spree 3.7 и Rails 5.2. Сейчас я сталкиваюсь с проблемой turbolink (версия 5.2.0), в которой реализован JavaScript для добавления элементов вкорзина, но метод js запускается дважды, и аналогичный товар добавляется в корзину дважды.

Я включил следующие теги js в тег head-

<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'. Согласно мне, турболинк загружает метод 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 голосов
/ 02 мая 2019

Так что, в принципе, я смог решить проблему, согласно Turbolink, наш javascript должен быть заключен в

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

Наши функции spree, такие как addToCartForm и т. Д., Работают на $( document ).ready()

.Я переопределил эти функции и завернул в turbolinks:load, теперь все работает нормально.

0 голосов
/ 15 апреля 2019

Согласно вашему комментарию, вы, вероятно, имеете две версии скомпилированных ресурсов локально. Попробуйте запустить rake assets:clobber, чтобы очистить дополнительные ресурсы.

...