2009-03-02 94 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