动态添加内容的Rails UJS

5
我正在使用带有原型ujs rails.js脚本的Rails 3.0。
页面加载后会添加一些link_to "...", :remote => true链接,这些链接在rails.js将所有a[data-remote]链接附加到ujs事件之后才被添加。
我该如何让rails.js重新扫描新链接?
rails.js似乎由一个匿名函数组成,所以我无法直接调用它。
我能想到的唯一方法是将所有rails.js包装在自己的函数中,然后在页面加载时和添加新链接时调用它。
这似乎是一个合理的方法,但我犹豫不决,因为我不相信我是第一个遇到这个问题的人,也不相信没有标准的解决方法…

你解决这个问题了吗?我也遇到了同样的问题。目前我使用 button_to 来代替,但这让我很失望。我不明白为什么它使用 delegate,而 delegate 应该提供延迟绑定。另外,delegate 已经被取代了,但那是另外一回事。 - Mark Fraser
2个回答

2
当你要渲染一个按钮、链接等时,你需要使用Rails助手。
= link_to "Add to basket", basket_path, :method => :post, :remote => true

当您在远程视图中(例如:some_view.js.erb / some_view.js.haml)响应时,如果您想要一个:remote元素,则应再次使用Rails助手。 不需要重新扫描它们以附加远程行为。

在js视图中,您可以使用JavaScript更新/替换DOM中的内容。

:plain
        $('#some-id-selector').replaceWith("#{escape_javascript(render :partial => 'some_other_view.html.haml')}");

此外,您可以在浏览器的网络检查器中查看是否发送了新的操作。


1
你可以自己调用Rails的“远程”链接处理。例如:
$(document).on('click', 'a.load-ad-node', function() {
  $.rails.handleRemote($(this));
  return false;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接