2011-06-25 84 views
2

好了,所以这可能是一种奇怪的,但这里的问题:Rails的布局JS和HTML渲染

我有,我想使更多的干类似的控制器/视图相互作用的大量。用户点击链接,该链接被转换为使用JQuery执行AJAX响应。响应期望返回并执行一些JavaScript。其中一些遵循相同的模式:

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

有没有办法让这个我可以做干燥该起来......

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

它仍然返回的JavaScript?

回答

1

是的,你可以,如果你使用布局内的布局。 (它需要你建立一个文件,但它会干的。)我不确定这是你想要的,但这是它的工作原理。

你嵌套布局可以调用yield(即使你有一个普通的布局,还要求yield对于JS,渲染堆栈将继续。 [模板]> [局部布局]> [局部]

你控制器将打电话给你的普通渲染指令(或没有,如果它是隐含的)(我不知道你要声明这部分将被呈现,所以我只是在这里采摘。):

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

你模板,而不是调用部分(some_partial)将调用部分模板即,后者又调用部分:

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

你的嵌套部分然后可以调用方法yield

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