“remote:true”对已动态加载的内容不执行任何操作

时间:2013-06-28 03:40:28

标签: ruby-on-rails jquery

假设你在rails中有这样的链接:

<%= link_to "Next page", url_for(controller: controller_name, action: 'step2'), remote: true, method: :post %>

这将成为属性data-remote="true"的链接。具有此属性的链接应该进行AJAX调用。

如果页面加载时它们在DOM中,它们就会这样做。 rails JS将运行,解析data-remote属性,并设置一个监听器以将单击转换为ajax调用。

但是,如果动态加载此链接,则会在rails js运行后将其插入到DOM中并解析所有内容。这意味着,如果您动态加载此链接,则单击它时不会进行ajax调用。它只是将整个窗口重定向到链接。

我可以手动调用rails js提供的某些功能,它会重新解析这些data-remote属性的dom,并确保它们都会进行ajax调用吗?

1 个答案:

答案 0 :(得分:2)

你不需要做任何事情。

rails js在加载时不会“解析”文档,而是将事件绑定到文档。因此,如果您创建新元素并触发某个事件,它仍然会冒泡并继续工作(例如.live()中已弃用的jQuery方法)。

您可以在line 290 of the rails js脚本

中查看此操作
$(document).delegate(rails.linkClickSelector, 'click.rails', function(e) {

只要您正确定义回调(例如ajax:successajax:complete等),一切都应该是花花公子。

有关详细信息,请查看: