Oui, vous pouvez créer une app/views/shared/_flash_messages.js.rjs
partielle, que vous pouvez rendre partout (par exemple, d'autres rjs
partials.)
Mon approche dans ce genre d'applications a été la suivante:
pour les réponses non-AJAX qui peuvent avoir un flash:
- dans la disposition (par ex.
layouts/application.erb
), ajouter par exemple:
render :partial => 'shared/flash_messages.html.erb'
pour les réponses AJAX qui peuvent aussi avoir besoin d'afficher un message flash, j'ai ajouté le code rjs
suivant:
- dans chaque réponse
rjs
(par exemple controller/action.js.rjs
), ajouter par exemple:
render :partial => 'shared/flash_messages.js.rjs'
Lorsque les deux partiels effectuent le rendu du flash, appelez le flash.discard(:error)
ou le flash.discard(:notice)
selon le cas.
Exemple de fichier app/views/shared/flash_messages.html.erb
:
<% 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 %>
Sample file app/views/shared/flash_messages.html.rjs
:
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
Thankyou. C'était exactement le genre d'exemple que j'espérais. Mes fichiers js.erb sont beaucoup plus propres maintenant;) – atmorell