用于JS和HTML呈现的Rails布局

时间:2011-06-25 19:44:44

标签: jquery ruby-on-rails ruby-on-rails-3 erb

好的,所以这可能有点奇怪,但问题是:

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

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

有没有办法做到这一点,以便我可以通过做...来干这个...

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

它还会返回JavaScript吗?

1 个答案:

答案 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 ... */