2011-09-05 16 views
9

tengo mi estructura de carpetas activos como este¿Cómo mostrar el JavaScript específico del controlador en los rieles 3.1?

assets 
    javascripts 
    products 
     --product.js 
     --productValidate.js 
    store 
     --store.js 

Quiero que los project.js y projectValidate.js que se añadirán en mis application.js como parte del activo tubo de forro sólo cuando las acciones de control del producto es called y store.js cuando se llaman acciones en el controlador de la tienda. ¿Cómo puedo lograr esto en los carriles 3.1?

Respuesta

1

Por lo que sé, los activos de pipilene es algo que debe precompilarse. Entonces ... conceptualmente debería tomar todos los archivos a la vez y devolver solo un archivo copilado, y es bueno para el almacenamiento en caché.

Se pueden almacenar en algún lugar od activos (en puplic, como carriles más antiguos, por ejemplo) e incluirlo en función de controlador y la acción

+1

Acabo de ver Railscast 279, en el que Ryan menciona que v puede especificar qué carpetas desea agregar con el archivo application.js usando require_directory en lugar de require_tree en los piñones. Quiero saber si hay formas similares de agregar js específicos del controlador. – Rahul

+0

Ryan mencionó QUÉ CARPETAS quieres COMPILAR, no está en tiempo de ejecución :) – fl00r

4

Como ya se ha mencionado Rahul, application.js corriente es precompilado y el lo mismo para cada acción. Por lo tanto, no depende de un controlador en particular. Application.js debe contener el javascript que necesita para todas (o la mayoría) de sus acciones.

Sin embargo, puede ampliar el diseño de su aplicación con diseños anidados. Supongamos la siguiente estructura:

... app/view/layouts/application.html.erb ... 

<html> 
<head> 
    <%= javascript_include_tag 'application' %> 
    <%= yield :javascripts %> 
    <%= stylesheet_link_tag 'application' %> 
    <%= yield :stylesheets %> 
</head> 
<body> 
    <%= yield %> 
</body> 
</html> 

y a:

... app/view/layouts/products.html.erb ... 

<% content_for :stylesheets do %> 
    <%= stylesheet_include_tag 'products' %> 
<% end %> 
<% content_for :javascripts do %> 
    <%= javascript_include_tag 'products' %> 
<% end %> 
<%= render :template => 'layouts/application' %> 

lo que sólo tiene que añadir/requerir su estilo y JavaScripts los productos archivos. Aviso, todo el código aquí debe leerse como pseudo-código, no lo probé.

Información extraída del "official" Render-Guide.

+0

Esto es lo que yo uso también. Pero puse las etiquetas javascript justo antes de la etiqueta ''. – Victor

+2

Debe poner etiquetas de javascript antes de la etiqueta de cierre '' si quiere ser un buen ciudadano. –

1

This is what I am working on ahora para cerrar la brecha entre los rieles 3,1 activos tubería y Jammit.

No he proporcionado ninguna documentación, ya que todavía la considero en desarrollo. Pero this is lo que básicamente debe permitir hacer:

# config/initializers/pakunok.rb 
# Define the dependencies between Rails assets: 
require 'pakunok' 
Pakunok::Pakunok.current.configure do 
    asset('products/product.js').needs('products/productValidate.js') 
end 

Y entonces, en su diseño, sólo tiene que hacer una sola incluyen. Todos los archivos dependientes se incluyen automáticamente :

# app/views/layouts/application.html.erb 
<%= include_javascripts %> 

Por favor ver las especificaciones para aprender lo que la gema puede hacer. Nota: todavía está en desarrollo y la gema en sí se dividirá en varias más adelante.

Para cualquier casos de uso particular que usted desea tener un soporte, por favor submit issues y prometo trabajar duro para poner en práctica aquellas en las que voy a tener tiempo :)

+0

Esto parece prometedor. Lo probaré y te lo contaré. Gracias ... – Rahul

Cuestiones relacionadas