Скажем, мне нужно вызвать javascript файл в <head>
шаблона ERb.
Мой инстинкт состоит в том, чтобы сделать обычное:
<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
</head>
в моем макете приложения. Проблема, конечно, в том, что эти файлы javascript загружаются на каждую страницу моего приложения независимо от того, нужны они или нет для просматриваемой страницы.
Так что мне интересно, если есть хороший способ загрузки javascript в заголовки, например, все шаблоны ERb, найденные только в определенном каталоге.
Ответ 1
Я бы использовал content_for.
Например, укажите место для его вставки в макет приложения:
<head>
<title>Merry Christmas!</title>
<%= yield(:head) -%>
</head>
И отправьте его с просмотра:
<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
Ответ 2
Я чувствую, что нет ничего плохого, включая все значения по умолчанию yr, так как они могут быть кэшированы в браузере пользователя.
Ответ 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 -%>
Ответ 4
Я обычно имею следующее в файле макета:
<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
<%= @extra_head_content %>
</head>
И затем в представлениях:
<% (@extra_head_content ||= "") += capture do %>
<%= other_content %>
<% end %>
Смотрите документацию API для # capture