2

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

嗨,这是对@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>

应用程序/资产/javascripts/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 的类似问题,他们都说 use .on,据我所知,这就是我在做什么。但我是一个完全的 Javascript 新手。

4

1 回答 1

0

我通过使用它来工作:

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

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

现在 turbolinks 让它表现得非常不稳定。但那是一个不同的话题......

于 2013-08-08T01:22:40.417 回答