2016-10-15 4 views
0

Я участвую в процессе обучения Rails и борюсь с лучшими практиками в отношении специфичного для страницы javascript. Даже с помощью этого простого подхода, turbolinks (я считаю) вызывает javascript для выполнения дважды, если я посещаю страницу, а затем возвращаюсь к ней.Rails 5: Почему 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, затем ссылка на индекс, который я ожидаю увидеть:

hi from index! 
hi from index2! 
hi from index! 

Но вместо этого, я получаю третье сообщение дважды:

hi from index! 
hi from index2! 
hi from index! 
hi from index! 

Почему мой Javascript дважды выполняется на второй визит в индекс, и есть лучший способ настройки страницы конкретного JavaScript для не выполнять его дважды?

Благодарим за помощь.

ответ

2

Это было вызвано турбовинками, отображающими предварительный просмотр при повторном просмотре страницы. Я понимаю, что turbolinks на короткое время отображает предварительный просмотр, улучшает воспринимаемое время загрузки, а затем заменяет его. В моем примере Javascript выполняется как при показе предварительного просмотра, так и при его замене.

В моем сценарии исполняющего JavaScript дважды не вызывает никаких болезненных побочных эффектов, но если бы это можно было бы остановить, отключив просмотр со следующим, за их documentation:

<head> 
    ... 
    <meta name="turbolinks-cache-control" content="no-preview"> 
</head> 
Смежные вопросы