Javascript Включить теги Best Practice в приложение Rails - PullRequest
61 голосов
/ 24 декабря 2008

Скажем, мне нужно вызвать файл javascript в <head> шаблона ERb. Мой инстинкт должен делать как обычно:

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

в макете моего приложения. Конечно, проблема в том, что эти файлы javascript загружаются на каждую страницу моего приложения, независимо от того, нужны ли они для просматриваемой страницы.

Так что мне интересно, есть ли хороший способ загрузки javascript в заголовки, например, всех шаблонов ERb, найденных только в определенном каталоге.

Ответы [ 4 ]

111 голосов
/ 24 декабря 2008

Я бы использовал content_for .

Например, укажите место для вставки в макет приложения:

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

и отправьте туда с видом:

<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
6 голосов
/ 24 декабря 2008

Я чувствую, что в этом нет ничего плохого, включая все значения по умолчанию, так как они могут быть затем кэшированы в браузере пользователя.

3 голосов
/ 19 июня 2013

Я бы посоветовал не добавлять javascript в заголовок, так как это заставляет страницу загружаться медленнее. Скорее загрузите js внизу страницы, что быстрее. http://developer.yahoo.com/performance/rules.html#js_bottom

<body>
 ....
  <%= yield(:js) -%>
</body>

И отправь туда из вида:

<%- content_for(:js) do -%>
  <%= javascript_include_tag :defaults -%>
<%- end -%>
1 голос
/ 24 декабря 2008

У меня обычно есть следующее в файле макета:

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

А потом во взглядах:

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

См. Документацию API для # capture

...