web-dev-qa-db-fra.com

Javascript inclut les meilleures pratiques de tag dans une application Rails

Dites que je dois appeler un fichier javascript dans le <head> d'un modèle ERb. Mon instinct est de faire l'habituel:

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

dans la mise en page de mon application. Le problème devient bien sûr que ces fichiers javascript sont chargés dans chaque page de mon application, qu'ils soient nécessaires ou non pour la page consultée.

Je me demande donc s'il existe un bon moyen de charger un javascript dans les en-têtes de, par exemple, tous les modèles ERb trouvés uniquement dans un répertoire spécifique.

61
btw

J'utiliserais content_for .

Par exemple, spécifiez l'emplacement pour l'insérer dans la présentation de l'application:

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

Et envoyez-le depuis une vue:

<%- content_for(:head) do -%>
<%= javascript_include_tag :defaults -%>
<%- end -%>
111
maurycy

Je pense qu'il n'y a rien de mal, y compris tous les paramètres par défaut, car ils peuvent ensuite être mis en cache sur le navigateur de l'utilisateur.

6
JasonOng

Je suggérerais de ne pas ajouter de javascript dans l'en-tête car cela provoque un chargement de la page plus lent. Chargez plutôt les js en bas de la page, ce qui est plus rapide. http://developer.yahoo.com/performance/rules.html#js_bottom

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

Et envoyez-le depuis une vue:

<%- content_for(:js) do -%>
  <%= javascript_include_tag :defaults -%>
<%- end -%>
3
Jitu

J'ai généralement les éléments suivants dans le fichier de mise en page:

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

Et puis dans les vues:

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

Voir la documentation de l'API pour # capture

1
Gareth