61

假设我需要在<head>ERb 模板中调用 javascript 文件。我的直觉是照常做:

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

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

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

4

4 回答 4

111

我会使用content_for

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

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

并从一个视图发送到那里:

<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
于 2008-12-23T22:02:41.023 回答
6

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

于 2008-12-24T14:51:06.340 回答
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 -%>
于 2013-06-19T05:51:40.110 回答
1

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

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

然后在视图中:

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

请参阅#capture的 API 文档

于 2008-12-23T21:56:04.483 回答