好的,所以这可能有点奇怪,但问题是:
我有很多类似的控制器/视图交互,我想让它更干。用户单击链接,该链接将转换为使用JQuery执行AJAX响应。响应期望返回并执行一些JavaScript。其中一些遵循相同的模式:
$("working_div").html("<%= render partial => 'some_partial' %>")
有没有办法做到这一点,以便我可以通过做...来干这个...
$("working_div").html("<%= yield %>")
它还会返回JavaScript吗?
答案 0 :(得分:1)
是的,如果您在布局中使用布局,则可以。 (它需要你再建一个文件,但它会干掉。)我不确定这是不是你想要的,但这是它的工作原理。
您的嵌套布局可以调用yield
(即使您有一个普通的布局也调用yield
。对于js,您的渲染堆栈将继续:
[模板]&gt; [部分布局]&gt; [部分]
您的控制器将调用您的普通渲染命令(如果它是隐式的,则不会调用)。 (我不知道你想在哪里声明要渲染哪个部分,所以我只选择这里。):
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 ... */