Rails:使用远程渲染链接:true不会触发AJAX

时间:2019-01-18 16:04:07

标签: ruby-on-rails ruby erb

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

<!-- 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)) %>")

非常标准,页面加载的链接可以正常工作,呈现字段。

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

有人知道解决方案吗?尽管无法找到解决方案,但我不能成为第一个遇到这种情况的人-如果有人能找到一个副本,它会很高兴地被接受。

谢谢。

1 个答案:

答案 0 :(得分:0)

在进行一些调试后找到了解决方案。

在单击链接时查看终端输出,我注意到有时它会尝试通过JS提交,然后是HTML;其他,则似乎只是通过HTML提交。

这表明在默认行为与使用remote: true导致的行为之间发生了竞争。

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

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

不太理想,我认为它已在新的Rails版本中修复,尽管此处提供了一些闭包:)