我的大多数js.erb文件底部都包含这样的内容:
$("#flash_message").html("<%= escape_javascript(content_tag(:p, flash[:note], :class => "note")) %>"); $("#flash_message").fadeOut(2000); $("#loading").remove();
我想将这些行移动到一个单独的文件中,然后从我的每个js.erb文件中调用该文件.有可能吗?
最好的祝福.AsbørnMorell
是的,您可以创建一个app/views/shared/_flash_messages.js.rjs
部分,然后可以从任何地方(例如,从其他rjs
部分)进行渲染.
我在这些应用程序中的方法如下:
对于可能有闪存的非AJAX响应:
在布局(例如layouts/application.erb
)中,添加例如:render :partial => 'shared/flash_messages.html.erb'
对于可能还需要显示flash消息的AJAX响应,我添加了以下rjs
代码:
在每个rjs
响应中(例如controller/action.js.rjs
),添加例如:render :partial => 'shared/flash_messages.js.rjs'
如果两个部分做了渲染闪光所必需的,那么请打电话flash.discard(:error)
或flash.discard(:notice)
酌情.
样本app/views/shared/flash_messages.html.erb
文件:
<% if flash[:error] %><%= h(flash[:error]) %><% flash.discard(:error) %> <% elsif flash[:notice] %><%= h(flash[:notice]) %><% flash.discard(:notice) %> <% else %> <% end %>
样本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