2009-03-02 8 views
8

私js.erbファイルのほとんどは、一番下にこのようなものが含まれていますDRYアップ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パーシャルから。)

次のようにこの種のアプリケーションでの私のアプローチがされています:

    01:フラッシュを有することができる非AJAX応答のための
    • レイアウト内の

    • (例: layouts/application.erb)、例えば追加各rjs応答(例えばcontroller/action.js.rjs)に

      • 、:、フラッシュメッセージを表示する必要があるかもしれないAJAX応答の
        render :partial => 'shared/flash_messages.html.erb'
    • を、私は、次のrjsコードを追加し追加例:
      render :partial => 'shared/flash_messages.js.rjs'

2つの部分がフラッシュをレンダリングするのに必要な場合は、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

関連する問題