簡體   English   中英

Rails 5:為什么 javascript 執行兩次?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM