Turbolinks 5 и setInterval выпуск - PullRequest
       30

Turbolinks 5 и setInterval выпуск

0 голосов
/ 21 февраля 2019

Я использую Turbolinks 5 с Rails 5 , и я устанавливаю интервал JS для обновления содержимого страницы каждые 10 секунд через AJAX:

<script type="text/javascript">
  $(document).ready(function() {
    function fetchContent() {
      // some AJAX request
    }

    setInterval(fetchContent, 10000);
  });
</script>

Когда я впервые загружаю страницу, содержащую вышеуказанный код, он работает: fetchContent запускается каждые 10 секунд.

Однако, когда я перехожу на другую страницу, fetchContent продолжает срабатывать.Более того, когда я возвращаюсь на страницу (используя кнопку возврата браузера), fetchContent срабатывает непредсказуемо несколько раз.Очевидно, что это нежелательное поведение.

Как это исправить?


Примечание : Чтобы это исправить, я знаю, что мне может понадобиться clearIntervalвызов какой-то, но как мне сделать это с помощью Turbolinks 5, например, какое событие я должен связать?Начиная с Turbolinks 5, API изменился .В частности, все события Turbolinks Classic были переименованы, а некоторые, включая page:update, были удалены, поэтому я не могу использовать такие решения, как this , this или это .

1 Ответ

0 голосов
/ 22 февраля 2019

Может быть Я нашел решение.В application.js я указал:

function setIntervalWithTurbolinks(intervalFunction, milliseconds) {
  var interval = setInterval(intervalFunction, milliseconds);

  $(document).on('turbolinks:before-cache turbolinks:before-render', function() {
    clearTimeout(interval)
  });
}

Итак, в моем приложении я использую это следующим образом:

setIntervalWithTurbolinks(fetchContent, 10000);
...