2008-12-23 37 views
60

說我需要調用ERb模板的<head>中的JavaScript文件。 我的直覺是做平常:Javascript包含標記在Rails應用程序中的最佳實踐

<head> 
<%= javascript_include_tag :defaults %> <!-- For example --> 
</head> 
在我的應用程序的佈局

。當然,這些JavaScript文件會加載到我的應用程序的每個頁面中,無論它們是否需要用於查看頁面。

所以我想知道的是,如果有一種很好的方式將JavaScript加載到頭文件中,例如僅在特定目錄中找到的所有ERb模板。

回答

110

我會用content_for

例如,指定的地方,將其插入到應用程序佈局:

<head> 
<title>Merry Christmas!</title> 
<%= yield(:head) -%> 
</head> 

而且從視圖中有發送:

<%- content_for(:head) do -%> 
<%= javascript_include_tag :defaults -%> 
<%- end -%> 
+0

剛纔救了我的一天。謝謝! – AnApprentice 2010-10-05 03:35:25

+1

爲什麼<% - 而不是<%=?這是一些特殊的語法? – 2011-07-24 12:02:50

1

我平時都在佈局文件中的以下內容:

<head> 
    <%= javascript_include_tag :defaults %> <!-- For example --> 
    <%= @extra_head_content %> 
</head> 

然後在訪問量:

<% (@extra_head_content ||= "") += capture do %> 
    <%= other_content %> 
<% end %> 

見API文檔#capture

6

我覺得也沒什麼不好,包括所有年違約以來然後他們可以緩存在用戶的瀏覽器上。

3

我會建議不要在標題中添加JavaScript,因爲它會導致頁面加載速度變慢。而是加載頁面底部的js,這更快。 http://developer.yahoo.com/performance/rules.html#js_bottom

<body> 
.... 
    <%= yield(:js) -%> 
</body> 

而且從視圖中有發送:

<%- content_for(:js) do -%> 
    <%= javascript_include_tag :defaults -%> 
<%- end -%>