Выпуск :

У меня есть приложение для электронной коммерции, построенное на Spree 3.7 и Rails 5.2. Прямо сейчас я сталкиваюсь с проблемой turbolink (версия 5.2.0), в которой я реализовал 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 загружает метод 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
1
Vishal G 15 Апр 2019 в 17:02

2 ответа

Лучший ответ

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

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

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

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

0
Vishal G 2 Май 2019 в 07:47

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

0
NM Pennypacker 15 Апр 2019 в 15:30