2009-03-02 14 views
8

La mayoría de mis archivos js.erb contiene algo como esto en la parte inferior:secan archivos js.erb (incluye otro archivo js.erb)

$("#flash_message").html("<%= escape_javascript(content_tag(:p, flash[:note], :class => "note")) %>"); 
$("#flash_message").fadeOut(2000); 
$("#loading").remove(); 

me gustaría mover estas líneas en un archivo separado y luego llame a ese archivo desde cada uno de mis archivos js.erb. ¿Es posible algo así?

Saludos cordiales. Asbørn Morell

Respuesta

7

Sí, es posible crear un parcial app/views/shared/_flash_messages.js.rjs, que luego se puede hacer desde cualquier lugar (por ejemplo, de otros rjs parciales.)

Mi enfoque en este tipo de aplicaciones ha sido el siguiente:

  • para las respuestas de los no-AJAX que puede tener un flash:

    • en el diseño (p. layouts/application.erb), agregue por ejemplo:
      render :partial => 'shared/flash_messages.html.erb'
  • para las respuestas AJAX que también pueden necesitar para mostrar un mensaje flash, he añadido el rjs siguiente código:

    • en cada respuesta rjs (por ejemplo controller/action.js.rjs), añadir por ejemplo:
      render :partial => 'shared/flash_messages.js.rjs'

Cuando los dos parciales hacen lo necesario para procesar el flash, llame al flash.discard(:error) o flash.discard(:notice) según corresponda.

Muestra app/views/shared/flash_messages.html.erb archivo:

<% if flash[:error] %> 
<div id="flash_message" class="error"><%= h(flash[:error]) %></div> 
<% flash.discard(:error) %> 
<% elsif flash[:notice] %> 
<div id="flash_message" class="notice"><%= h(flash[:notice]) %></div> 
<% flash.discard(:notice) %> 
<% else %> 
<div id="flash_message" style="display: none;" /> 
<% end %> 

Muestra app/views/shared/flash_messages.html.rjs archivo:

if !flash[:error].blank? 
    page['flash_message']. 
    replace_html(flash[:error]). 
    removeClassName('notice'). 
    addClassName('error'). 
    show() 
else 
    page['flash_message']. 
    replace_html(flash[:notice]). 
    removeClassName('error'). 
    addClassName('notice'). 
    show() 
end 
+0

Gracias. Este era exactamente el tipo de ejemplo que esperaba. Mis archivos js.erb están mucho más limpios ahora;) – atmorell

Cuestiones relacionadas