jQuery不会在Rails中通过AJAX进行部分渲染

时间:2013-08-08 01:04:50

标签: jquery ruby-on-rails ajax dom ujs

我的应用程序有一个名为“备忘录”的东西。您可以在备忘录中使用@标签回复其他备忘录。例如:

  

嗨,这是对@ 123

的回复

然后,如果您点击@ 123,则会在您正在查看的备忘录下面呈现备忘录#123。

_memo.html.erb:

<div class="memo">
    <div class="memo-content">
        <%= raw simple_format(memo.content).gsub(/@([a-z0-9A-Z]+)/, '<a  data-remote="true" class="marker" href="/memos/\1">@\1</a>')%>
    </div>
</div>

应用/资产/ Javascript角/ memo.js:

$(function() {
    $(".marker").on("ajax:success", function(e, content){
        console.log("hi")
        $(".memos-container").append(content);
    });
})

memos_controller.rb:

  def show
    @memo = Memo.find(params[:id])
    if request.xhr?
      render partial: "shared/memo", locals: { memo: @memo } 
    end
  end

第一次点击效果很好。如果我点击@123,则会在页面中呈现备忘录#123。如果我点击第一份备忘录中的任何其他@标签,它们都会起作用。

问题是,渲染备忘录内部没有任何内容可以点击。因此,如果备注#123也有@ 456标签,我点击它,则不会呈现任何内容。

在Chrome浏览器中查看我的网络控制台时, 发出get请求,只有jQuery不会对新呈现的DOM元素进行操作。

我在SO上看过类似的问题,他们都说使用.on,据我所知,这就是我正在做的事情。但我总是Javascript newb。

1 个答案:

答案 0 :(得分:0)

我通过使用它来实现它:

$(function() {
    $(document).ajaxSuccess(function(e, content){
        console.log(content.responseText)
        $(".memos-container").append(content.responseText);
    });
})

但如果有更好的方法可以做到这一点,我愿意接受建议:)

现在,turbolinks让它变得一团糟。但那是一个不同的话题......