2016-05-13 110 views
0

我有幾個js文件,我把它們放到vendor/assets/js。然後我需要他們在應用程序js文件中;Rails資產管道 - 只添加jquery頭

​​

在頁面頂部我需要jQuery和jquery_ujs屬於jquery。現在,我加載應用程序js文件爲;

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>  

的事情是,我有幾個內部..html.erb文件,這首先需要在頁面加載JS代碼。但我想將它們合併到一個js文件中。我想要做的只是在head標籤中調用jquery,並在body中調用應用程序js文件。但如果我刪除jquery gem並將其稱爲;

<%= javascript_include_tag 'jquery.min', 'data-turbolinks-track' => true %>  

Rails給出了關於jquery_ujs的錯誤。當然,我也可以在那裏添加jquery_ujs。但是,最佳做法是什麼?

+1

渦輪鏈接的最佳實踐是在頭部添加儘可能多的腳本,並且只有絕對必要的腳本在體內。嘗試將腳本從html.erb文件中的正文拉到頭部,如果中斷,只能將其移動到正文。 – Anand

回答

3

向您的rails應用程序添加頁面特定js代碼(從而避免在一個頁面中只需要庫或腳本時在每個頁面中加載js)的最常用方式是添加到佈局的最底部/application.html.erb文件的結束標記的前面:

<%= yield :javascript %> 

    </body> 
</html> 
的觀點

然後你要找運行一些片段的JavaScript,你應該所有的HTML標籤後把這個在它的最底層已關閉。確保它不在該視圖內的任何div或任何內容中,而是位於其底部。

更新引用弗雷德:

<%= content_for :javascript do %> 
    <script type="text/javascript"> 
    $(document).on('page:load', function() { 
     all your code here.. 
    }); 
    </script> 
<% end %> 

此代碼現在將屈服於你的佈局視圖底部僅載入你需要,而不是在你的資產/ JS與所有其他資產被串聯沿着具體意見夾。我使用所有不是應用程序範圍的自定義js來執行此操作,並且維護/調試非常簡單。

+1

啓用turbolinks後,我們不應該綁定到ready事件,而是在page:load(或turbolinks:load for turbolinks 5)上,否則當從瀏覽器緩存中獲取頁面時不會調用它 – Fred