#javascript #ruby-on-rails #ruby-on-rails-5
#javascript #ruby-on-rails #ruby-on-rails-5
Вопрос:
Я нахожусь в процессе изучения Rails и борюсь с лучшими практиками в отношении javascript для конкретной страницы. Даже при таком простом подходе turbolinks (я полагаю) заставляет javascript выполняться дважды, если я посещаю страницу, а затем возвращаюсь к ней.
Чтобы упростить сценарий, я создал новый проект с двумя действиями контроллера и запустил сервер.
rails new jstest
cd jstest
rails g controller home index index2
rails server
Теперь я обновил представления следующим образом:
index.html.erb:
<%= link_to "Index2", home_index2_path %>
<script>
console.log("hi from index!");
</script>
index2.html.erb:
<%= link_to "Index", home_index_path %>
<script>
console.log("hi from index2!");
</script>
Перейдя в /home/index, перейдя по ссылке на index2, затем по ссылке обратно на index, которую я ожидал увидеть:
hi from index!
hi from index2!
hi from index!
Но вместо этого я дважды получаю третье сообщение:
hi from index!
hi from index2!
hi from index!
hi from index!
Почему мой javascript выполняется дважды при втором посещении index, и есть ли лучший способ настроить javascript для конкретной страницы, чтобы избежать его выполнения дважды?
Спасибо за вашу помощь.
Ответ №1:
Это было вызвано тем, что turbolinks отображали предварительный просмотр при повторном посещении страницы. Насколько я понимаю, turbolinks кратко отображает предварительный просмотр, чтобы улучшить воспринимаемое время загрузки, а затем заменяет его. В моем примере Javascript выполняется как при отображении предварительного просмотра, так и снова при его замене.
В моем сценарии выполнение javascript дважды не вызывало никаких побочных эффектов, но если бы это было так, его можно было бы остановить, отключив предварительный просмотр следующим образом, согласно их документации:
<head>
...
<meta name="turbolinks-cache-control" content="no-preview">
</head>
Комментарии:
1. Спасибо, я так долго разбирался в этом. Я не знал, что Turbolinks это сделал!