【问题标题】:Rails: rendering link with remote: true doesn't fire AJAXRails:使用远程渲染链接:true 不会触发 AJAX
【发布时间】:2019-01-24 20:24:29
【问题描述】:

我在 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

有人知道这个问题的解决方案吗?我不能成为第一个遇到这个问题的人,尽管我无法找到解决方案 - 如果有人能找到解决方案,我很乐意接受副本。

提前致谢。

【问题讨论】:

  • 你是否包含了标准的 JS 库? 没有这些,remote: true 标签将无法工作
  • 是的,一切就绪@Mark - 第一个请求触发良好,第二个请求有问题。不过干杯。
  • 它与@Mark 呈现的模板相同 - 如果我在新模板中忘记了它,我会在第一个模板中忘记它。我没有:)
  • 你使用的是什么 Rails 版本?
  • 已更新问题@JohanWentholt,Rails 3。抱歉,应该指定。

标签: ruby-on-rails ruby erb


【解决方案1】:

经过一番调试,找到了解决方案。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2021-08-13
    • 2021-09-13
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    相关资源
    最近更新 更多