Javascript Include tag Best Practice in a Rails Application

Powiedzmy, że muszę wywołać plik javascript w <head> szablonu ERb. Moim instynktem jest robić to co zwykle:

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

W układzie mojej aplikacji. Problem staje się oczywiście, że te pliki javascript są ładowane do każdej strony w mojej aplikacji, niezależnie od tego, czy są one potrzebne do oglądania strony.

Więc zastanawiam się, czy jest dobry sposób ładowania javascript do nagłówków, na przykład, wszystkie szablony ERb znaleziono tylko w określonym katalogu.

Author: Eugene Lazutkin, 2008-12-23

4 answers

Użyłbym content_for .

Na przykład określ miejsce, w którym chcesz go wstawić w układzie aplikacji:

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

I wyślij go tam z widoku:

<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
 111
Author: maurycy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-05 17:54:06

Czuję, że nie ma nic złego w tym wszystkie ustawienia domyślne yr, ponieważ mogą być następnie buforowane w przeglądarce użytkownika.

 6
Author: JasonOng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-24 14:51:06

Sugerowałbym, aby nie dodawać javascript w nagłówku, ponieważ powoduje to wolniejsze ładowanie strony. Raczej załaduj js na dole strony, co jest szybsze. http://developer.yahoo.com/performance/rules.html#js_bottom

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

I wyślij go tam z widoku:

<%- content_for(:js) do -%>
  <%= javascript_include_tag :defaults -%>
<%- end -%>
 3
Author: Jitu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 05:51:40

Zwykle w pliku układu mam następujące:

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

A następnie w widokach:

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

Zobacz dokumentację API dla #capture

 1
Author: Gareth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-23 22:03:36