通过ajax加载部分内容由ajax加载的父部分

时间:2013-07-31 08:20:20

标签: jquery ruby-on-rails ajax renderpartial

我在文档中添加了评论。提交评论时,评论会通过AJAX部分加载/更新新评论。在这部分内部是一个链接,加载第二个部分(也由ajax加载),提交评论评论(即评论儿童)。

添加新注释时,部分会按预期重新加载新注释,但是加载第二个部分的链接在不重新加载页面的情况下不起作用。我相信我需要将第一个部分委托给文档中的div或元素,以便javascript(加载第二部分)加载并执行,我该如何实现?这是我的设置:

Create.js.erb:

$('#ajax').html("<%= j comments(@document, @current_user) %>");

在评论控制器中创建操作

def create

  ....

  respond_to do |format|
    format.js
  end
end


在评论部分内部,可以加载第二部分,提交儿童评论的表格(即评论评论)。

链接以触发第二个部分/离开评论子项(位于第一部分内)

= link_to "Reply", {:controller => :documents, :action => :show}, { :method => :get, :remote => true}

Show.js.erb:

$('#comment_child_form_<%= @comment_parent.id %>').html("<%= j comment_child_form(@current_user, @document, @comment_parent) %>");

在文档控制器中显示操作

def show

  ....

  respond_to do |format|
    format.html
    format.js
  end
end

注意:我使用的是Rails 3.2.12

1 个答案:

答案 0 :(得分:0)

我能够通过组合我的两个js.erb文件来解决这个问题:

create.js.erb

$('#ajax').html("<%= j comments(@document, @current_user) %>");
$('.reply-btn').click(function(){
  $('#comment_child_form_<%= @comment_parent.id %>').html("<%= j comment_child_form(@current_user, @document, @comment_parent) %>");
});

但是,我仍然不确定如何使用jquery委托/追加到现有的固定html元素(不在partial之内)(例如'body'),以便所有其他javascript包含(和可执行)加载部分。任何解决方法都将非常感谢。