我在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
。
有人知道解决方案吗?尽管无法找到解决方案,但我不能成为第一个遇到这种情况的人-如果有人能找到一个副本,它会很高兴地被接受。
谢谢。
答案 0 :(得分:0)
在进行一些调试后找到了解决方案。
在单击链接时查看终端输出,我注意到有时它会尝试通过JS提交,然后是HTML;其他,则似乎只是通过HTML提交。
这表明在默认行为与使用remote: true
导致的行为之间发生了竞争。
解决方案是在元素的点击处理程序上调用e.preventDefault()
:
$('.my-element').click(function(e) { e.preventDefault(); })
不太理想,我认为它已在新的Rails版本中修复,尽管此处提供了一些闭包:)