2008-12-23 15 views
60

Digamos que necesito llamar a un archivo javascript en el <head> de una plantilla ERb. Mi instinto es hacer la habitual:Javascript Incluir etiqueta Mejores prácticas en una aplicación Rails

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

en la disposición de mi solicitud. El problema, por supuesto, es que estos archivos javascript se cargan en todas las páginas de mi aplicación, independientemente de si son necesarias para la página que se está viendo.

Entonces, lo que me pregunto es si hay una buena forma de cargar un javascript en los encabezados de, por ejemplo, todas las plantillas de ERb que se encuentran solo en un directorio específico.

Respuesta

110

me gustaría utilizar content_for.

Por ejemplo, especifique el lugar para insertarlo en el diseño de la aplicación:

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

y enviarlo allí desde un punto de vista:

<%- content_for(:head) do -%> 
<%= javascript_include_tag :defaults -%> 
<%- end -%> 
+0

acaba de salvar mi día. ¡Gracias! – AnApprentice

+1

¿Por qué el <% - en vez de <% =? ¿Es esto alguna sintaxis especial? –

+2

En las versiones anteriores de los rieles, el "<% -" evita que erb genere espacios innecesarios antes de la etiqueta <%. Esto ocurre automáticamente con las versiones más recientes – Gu1234

1

normalmente tienen el siguiente en el archivo de diseño:

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

Y luego, en los puntos de vista:

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

Consulte la documentación de la API para #capture

6

me siento no hay nada malo que incluye todos los valores predeterminados año Desde luego pueden almacenarse en caché en el navegador del usuario.

+11

¿Qué ocurre si tiene inclusiones que solo son aplicables a la parte de administración de un sitio web? – Ali

3

Sugeriría no agregar javascript en el encabezado, ya que hace que la página se cargue más despacio. En lugar de cargar el js en la parte inferior de la página, que es más rápido. http://developer.yahoo.com/performance/rules.html#js_bottom

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

y enviarlo allí desde un punto de vista:

<%- content_for(:js) do -%> 
    <%= javascript_include_tag :defaults -%> 
<%- end -%> 
Cuestiones relacionadas