Все мои .js файлы выглядеть следующим образом:Rails turbolinks JS файлы Bug
function function_name(){
.....
some code
.....
}
$(document).ready(function_name);
$(document).on('page:load', function_name);
Я использую setInterval(some_function, 7000)
, обработчики событий, как $(document).on('click', '.blah-blah', function(){...})
. К сожалению, эти вещи звонят несколько раз, если у меня есть более одного запроса на сервер через turbolinks (с использованием сессии turbolinks). Фактически количество вызовов равно количеству запросов сервера. Например, у меня есть <button id="button"></button>
и обработчик события js, обработчик выполняет столько раз, сколько запросов в сеансе turbolinks у меня есть. Это так раздражает)
Я хочу, чтобы вы узнали, как включить турбовинты и избежать множественных вызовов внутри js-файлов. Благодарю.
Можете ли вы объяснить, почему это происходит? Почему он выполняется несколько раз? – user1538633
Не смотря конкретно на ваш код, позвольте мне дать обзорный ответ: Turbolinks оставляет загруженную в память страницу, она в основном превращает все регулярные ссылки в вызовы стиля ajax, поэтому Rails отправляет обратно только тело новой страницы, а turbolinks JS загружает это тело в существующую страницу. Это означает, что все ваши JS остаются в памяти, поэтому, если у вас был интервал, он продолжает работать. Затем ваша функция 'page: load' добавляет еще один интервал, и тогда они оба будут стрелять. – smathy
Большое спасибо, это то, что я хотел услышать) – user1538633