Javascript Включить теги Best Practice в Rails-приложении
Скажем, мне нужно вызвать файл JavaScript в <head>
шаблона ERb. Мой инстинкт должен делать обычное:
<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
</head>
в макете моего приложения. Проблема, конечно, в том, что эти файлы javascript загружаются на каждую страницу моего приложения, независимо от того, нужны ли они для просматриваемой страницы.
Поэтому мне интересно, есть ли хороший способ загрузки javascript в заголовки, например, всех шаблонов ERb, найденных только в определенном каталоге.
4 ответа
Я бы использовал content_for.
Например, укажите место для его вставки в макет приложения:
<head>
<title>Merry Christmas!</title>
<%= yield(:head) -%>
</head>
И отправьте его туда из вида:
<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
Я чувствую, что в этом нет ничего плохого, включая все настройки по умолчанию, так как они могут быть кэшированы в браузере пользователя.
Я бы посоветовал не добавлять javascript в заголовок, так как это заставляет страницу загружаться медленнее. Скорее загрузите js внизу страницы, что быстрее. http://developer.yahoo.com/performance/rules.html
<body>
....
<%= yield(:js) -%>
</body>
И отправьте его туда из вида:
<%- content_for(:js) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
У меня обычно есть следующее в файле макета:
<head>
<%= javascript_include_tag :defaults %> <!-- For example -->
<%= @extra_head_content %>
</head>
А потом во взглядах:
<% (@extra_head_content ||= "") += capture do %>
<%= other_content %>
<% end %>
Смотрите документацию по API для #capture