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

Другие вопросы по тегам