干掉js.erb文件(包括另一个js.erb文件)

时间:2009-03-02 16:20:34

标签: jquery ruby-on-rails

我的大多数js.erb文件底部都包含这样的内容:

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

我想将这些行移到一个单独的文件中,然后从我的每个js.erb文件中调用该文件。有可能吗?

祝你好运。 AsbørnMorell

2 个答案:

答案 0 :(得分:7)

是的,您可以创建一个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] %>
<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 %>

示例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

答案 1 :(得分:0)

<%= render :partial => 'common' %>,也许?

http://api.rubyonrails.org/classes/ActionController/Base.html#M000633