Javascript在Rails应用程序中包含标记最佳实践

时间:2008-12-23 21:48:34

标签: javascript ruby-on-rails header rjs

说我需要在ERb模板的<head>中调用javascript文件。 我的直觉是做平常的事情:

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

在我的应用程序的布局中。当然问题是这些javascript文件被加载到我的应用程序的每个页面中,无论是否需要查看该页面。

所以我想知道的是,是否有一种很好的方法可以将javascript加载到标题中,例如,只在特定目录中找到的所有ERb模板。

4 个答案:

答案 0 :(得分:111)

我会使用content_for

例如,指定将其插入应用程序布局的位置:

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

并从视图发送到那里:

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

答案 1 :(得分:6)

我觉得包括所有yr默认值都没有错,因为它们可以缓存在用户的浏览器上。

答案 2 :(得分: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 -%>

答案 3 :(得分:1)

我通常在布局文件中有以下内容:

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

然后在视图中:

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

请参阅#capture

的API文档