Javascript включает тег Best Practice в приложении Rails

Скажем, мне нужно вызвать 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