Turbolinks Multiplies Bindings

У меня возникла проблема, когда Turbolinks будет связывать события несколько раз при использовании кнопок назад/вперед через браузер. У меня есть простой script, чтобы убедиться, что это не так, как я писал свои события document.on(), поэтому...

$(document).on 'page:load', ->
  alert 'Loaded'

Будет срабатывать один раз при нажатии ссылки. Щелчок назад или вперед (или другая ссылка Turbolink) будет срабатывать дважды. В следующий раз он выстрелит несколько раз, и он будет расти. Это единственное, что у меня есть в моем манифестном файле за пределами jQuery и Turbolinks. Как вы препятствуете Turbolinks дублировать привязки событий?

Ответ 1

Проблема, казалось, включала javascript_tag в конце моего тела, а не в голову. Когда в теле Javascript удалялся/добавлялся на каждую страницу Turbolinks: изменяйте, чтобы привязки продолжали накладываться.

Ответ 2

Это имеет смысл - та же проблема будет возникать, если вы используете jquery-turbolinks gem, так как это приведет к тому, что любой код внутри вашей функции jQuery будет работать на каждой загрузке страницы. Поскольку объект документа никогда не повторно инициализируется с помощью Turbolinks, это приводит к избыточным привязкам. Решение для этого случая - разместить привязки $(document).on вне вашей функции jQuery, чтобы они не выполнялись при каждой загрузке страницы.

Ответ 3

У меня была такая же проблема, и в основном я сделал запрос, если бы была определена переменная до включения JS. Звучит немного грязная мысль...

Ответ 4

Я столкнулся с той же проблемой, и проблема заключалась в том, что разметка, которую я создавала на макете, была неправильной. Я закрывал тег body в месте, где я не должен