Rails 5.2: Как использовать JS-скрипты для конкретных страниц при использовании Turbolinks? - PullRequest
0 голосов
/ 22 октября 2018

Я пишу некоторый исследовательский javascript для страницы.Он включает следующую строку:

dashboard_settings.addEventListener('ajax:complete', function(){
  ...

Я поместил скрипт непосредственно перед закрывающим тегом body.

Я заметил, что при переходе на страницу JS работает так, как я ожидаюи в консоли нет сообщений об ошибках.Однако, когда я ухожу со страницы, в консоли JS появляется сообщение об ошибке:

Uncaught TypeError: Cannot read property 'addEventListener' of null

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

Можно ли вообще указать, что скрипт загружается только для одной страницы?

У меня естьбезуспешно пробовал следующее:

<%= yield :page_scripts %>
<% content_for :page_scripts do %>
    <script>
      document.addEventListener('turbolinks:load', function(){
    ...

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете добавить прослушиватель, только если элемент существует.

if (dashboard_settings)
  dashboard_settings.addEventListener('ajax:complete', function(){...})

Или, если вы не хотите добавлять его только для конкретной страницы, вы можете добавить оператор yield в свой макет и толькоустановить его содержимое на нужной странице

#layout
<html>
  <body>
    ...
  </body>
  <%= yield(:after_body) -%>
</html>


#your view
<%= content_for :after_body do -%>
  <script>
    document.addEventListener('turbolinks:load', function(){
      dashboard_settings.addEventListener('ajax:complete', function(){...})
    })
  </script>
<%- end -%>
...