2011-06-25 4 views
2

をレンダリングするので、これは一種の奇妙かもしれないが、ここで質問です:RailsのJSとHTMLのレイアウトがわかりました

私はより多くのDRYをしたいのですが同様のコントローラ/ビューの相互作用の多くを持っているが。ユーザーはJQueryを使用してAJAX応答を実行するために変換されたリンクをクリックします。この応答では、JavaScriptが返されて実行されることが予想されます。これらのいくつかは、同じパターンに従います。

$("working_div").html("<%= render partial => 'some_partial' %>") 

私が実行してこれを乾燥させることができるように、そのようにする方法があります...

$("working_div").html("<%= yield %>") 

そして、それはまだJavaScriptを返しますか?

答えて

1

レイアウト内でレイアウトを使用している場合、可能です。 (ファイルをもう1つビルドする必要がありますが、それはDRYになります)。これがあなたが望むものなのかどうかは分かりませんが、ここではどのように動作するのですか?

あなたのネストされたレイアウトは、あなたもyieldを呼び出す通常のレイアウトを持っている場合でも(yieldを呼び出すことができますjsのために、あなたのレンダリングスタックが続行されます:。 [テンプレート]> [部分レイアウト]> [部分]

あなた。(それは暗黙のだ場合、またはnone)コントローラは、(あなたがレンダリングされる部分どの宣言したい場所を私は知らないので、私はちょうどここに選んだ。)あなたの通常の描画コマンドを呼び出します。

def index 
    @partial = params[:partial] || 'some_partial' 
    respond_to do |format| 
    format.js render :template => 'my_template' 
    end 
end 

あなたテンプレート、部分(some_partial)を呼び出す代わりに部分的なテンプレートを呼び出す今度は部分的に呼び出すE、:

# nested_partial 
/* Some js ... */ 
<%= yield %> 
/* Some more js ... */ 

# my_template 
/* Some js ... */ 
$("#working_div").html("<%= render :layout => "nested_layout", :partial => @partial %>") 
/* Some more js ... */ 

あなたのネストされた部分は、メソッドを呼び出すことができますyield

関連する問題