我有一个简单的Rails ujs应用程序,页面上有一些远程链接。
<%= link_to 'Test', posts_path, remote: true, id: 'test' %>
在我的js模板中,我用新的链接替换了这个链接。
$('#test').html('<%= j link_to "Test", posts_path, remote: true, id: "test" %>')
同时我需要听ajax:成功事件:
window.addEventListener("load", () => {
document.body.addEventListener("ajax:success", (event) => {
# => Expected to be fired on all success ajax calls, no matter partial dom manipulations
});
});
但问题是,这一事件从未发生过。因为它的目标元素被替换了。
即使从dom中删除了ajax的目标元素,我如何才能听到ajax:success?
我的代码并没有实际意义,但它的目的是以简单的方式演示现实世界中的问题。
当我有远程链接时,比如posts-show操作,我会为正常交互创建一个show.html.erb
,然后也会创建一个show.js.erb
,在那里我会针对我想要从远程链接更改/修改的元素,并使用escape javascript方法替换那里的html。它看起来有点像$('some element').html('<%= j render 'some_partial.html.erb'%>')
。其中some_partial.html.erb
将是被替换的元素的一部分。
转义Javascript