2009-03-02 97 views
8

我的大部分js.erb文件包含在底部是这样的:干涸js.erb文件(包括另一js.erb文件)

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

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

此致敬礼。 AsbørnMorell

回答

7

是的,你可以创建一个app/views/shared/_flash_messages.js.rjs部分,然后你可以从任何地方呈现(例如,来自其他rjs谐音)。

我在这些类型的应用程序的做法一直如下:

  • 非AJAX响应,可能有一个闪光:

    • 在布局中(例如, layouts/application.erb),添加例如:
      render :partial => 'shared/flash_messages.html.erb'
  • 对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 
+0

三江源。这正是我所希望的那种例子。我的js.erb文件现在更清洁;) – atmorell 2009-03-04 10:39:29