[英]Rails 5: Why is javascript executing twice?
我正在學習 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 在第二次訪問索引時執行兩次,有沒有更好的方法來設置頁面特定的 javascript 以避免執行兩次?
感謝您的幫助。
這是由於 turbolinks 在重新訪問頁面時顯示預覽造成的。 我的理解是 turbolinks 簡要顯示預覽,以改善感知加載時間,然后替換它。 在我的示例中,Javascript 在顯示預覽時執行,在替換時再次執行。
在我的場景中,兩次執行 javascript 不會導致任何不良副作用,但如果是這樣,可以通過根據他們的 文檔禁用以下預覽來停止它:
<head>
...
<meta name="turbolinks-cache-control" content="no-preview">
</head>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.