Rails:使用 remote: true 渲染 link 不会触发 AJAX

Rails: rendering link with remote: true doesn't fire AJAX

我在 Rails 3 中有一个项目,部分 _form_fields.html.erb 呈现到页面并包含远程 link:

<!-- a few form fields, then... -->
<%= link_to '+', new_my_controller_path, remote: true %>

这由控制器处理,并在其下方附加相同的部分。

控制器:

def new
  respond_to do |format|
    format.js
  end
end

以及相关的 js.erb 文件:

$('.field-wrapper').append("<%= escape_javascript(render(partial: 'form_fields', layout: false)) %>")

一切都非常标准,并且 link 加载页面时按预期工作,呈现字段。

但是,这是我的问题,当在新呈现的内容上单击此 link 时,它会作为常规 link 提交,而忽略 remote: true

有人知道解决办法吗?我不是第一个遇到这个问题的人,但一直未能找到解决方案 - 如果有人能找到,我很乐意接受重复。

提前致谢。

稍微调试后找到了解决方法。

查看点击 link 时的终端输出,我注意到有时它会尝试通过 JS 提交,紧接着是 HTML;其他人,似乎只是通过 HTML.

提交

这表明默认行为与使用 remote: true 产生的行为之间存在竞争。

解决方案是在元素的点击处理程序上调用 e.preventDefault()

$('.my-element').click(function(e) { e.preventDefault(); })

不理想,我想在较新的 Rails 版本中已修复,但这里提供了一些关闭:)