2011-12-11 14 views
5

Este es el valor predeterminado application.js:Cómo cargar un activo Javascript dependiendo del controlador/acción?

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

plantillas CoffeeScript tienen este contenido:

# Place all the behaviors and hooks related to the matching controller here. 
# All this logic will automatically be available in application.js. 
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ 

Para mí, "relacionado con el controlador de juego aquí" significa que foo_bar.js.coffee sólo debe ser cargada cuando se usa el controlador foo_bar. ¿Estoy en lo cierto?

La cosa es que carga todos los archivos Javascript, incluso si no son necesarios. Además ... Me gustaría saber cómo incluir de forma condicional los archivos Javascript en función de la acción del controlador.

Respuesta

12

Un par de maneras de hacer esto, la manera más fácil y más elegante me he encontrado es la siguiente:

Retire la Directiva

//= require_tree . 

, y cambiar su templ comió a

<%= javascript_include_tag "application", controller_name %> 

A continuación, cargue su js global en la aplicación y el controlador específico en controller_name.

Por ejemplo, si está en posts_controller, obtendrá posts.js o posts.js.coffee loaded.

EDITAR

para realizar la acción, también se puede añadir

action_name 

a mi propuesta de solución. Una cosa que puede considerar es desglosarlo en application_controller.RB:

before_filter :your_function 

def your_function 
    @controller = controller_name 
    @action = action_name 
end 

Luego de usarlo como esto en su diseño

<%= javascript_include_tag "application", "#@controller.#@action" %> 
+1

+1 Estoy de acuerdo. Es una solución agradable y modular – lucapette

+2

Genial, así es como se debería haber hecho el esqueleto generado. ¿Qué hay de las acciones? Quiero decir ... me gustaría cargar un JavaScript solo para una acción específica ... ¿también es posible hacerlo de una manera fácil? – Cristian

3

La directiva require_tree en su application.js carga todos los archivos js y coffee encontrados en el árbol de sus activos. Si lo elimina, solo cargará los archivos especificados.

Para mí, "relacionado con el controlador correspondiente aquí" significa que foo_bar.js.coffee SÓLO debe cargarse cuando se usa el controlador foo_bar. ¿Estoy en lo cierto?

No, los archivos se cargan como se especifica a través de las directivas "require".

Además ... Me gustaría saber cómo incluir de forma condicional los archivos Javascript en función de la acción del controlador.

hacer un archivo foo_bar.js para cada controlador, en cada requieren otros archivos como sea necesario, y de forma condicionada ellos incluyen en su diseño

# some_layout.erb 
<%= javascript_include_tag params[:controller] %> 
Cuestiones relacionadas