Rails UJS用于动态添加内容

时间:2012-02-28 01:55:04

标签: ruby-on-rails prototypejs ujs

我正在使用Rails 3.0和原型ujs rails.js脚本。

我在页面加载后会在页面中添加一些link_to "...", :remote => true个链接,因此rails.js将ujs事件附加到所有a[data-remote]链接后。

如何让rails.js重新扫描以获取新链接?

rails.js似乎包含一个匿名函数,所以我无法直接调用它。

我能想到的唯一方法是将所有rails.js包装在我自己的函数中,然后我可以在页面加载时调用*和*当我添加新链接时。

这似乎是一种合理的方法,但我犹豫不决,因为我无法相信我是第一个遇到这个问题的人,并且没有标准的方法来做这件事......

2 个答案:

答案 0 :(得分:2)

当您渲染按钮,链接等时,您使用rails helpers

= link_to "Add to basket", basket_path, :method => :post, :remote => true

所以你在远程视图的响应中(例如: some_view.js.erb / some_view.js.haml )如果你想要,你应该再次使用rails helper:远程元素。 您无需重新扫描新的DOM元素,因此需要附加远程行为。

在js视图中,您可以使用javascript

更新/替换DOM中的内容
:plain
        $('#some-id-selector').replaceWith("#{escape_javascript(render :partial => 'some_other_view.html.haml')}");

如果正在发送新动作,您也可以在浏览器的网络检查器中观看。

答案 1 :(得分:1)

您可以自己调用Rails的“远程”链接处理。例如:

$(document).on('click', 'a.load-ad-node', function() {
  $.rails.handleRemote($(this));
  return false;
});