我有一个典型的CRUD操作应用程序
应用/视图/配方/ show.html.haml 包含一行
= link_to "Delete", recipe_path, method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"
如果我在apps / views / recipe / new.html.haml中创建新配方并重定向到 apps / views / recipe / show.html.haml并点击删除,然后它会给我一次确认并删除配方。
但是,如果我从典型类型的index.html.haml转到同一个显示页面,链接到http://localhost:3000/recipes/29等单个配方并点击删除按钮,确认将弹出3-4次.. (除非我首先刷新该页面,然后它会弹出确认一次)。
我尝试添加jQuery-turbolinks但它仍无效......
app / views / layouts / application.html.haml在%title
下有以下内容 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true
= csrf_meta_tags
不确定如何修复它以免多次弹出
编辑:即使在我通过传递@recipe来修复代码后,行为仍然相同
= link_to "Delete", recipe_path(@recipe), method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"
编辑2: 如果我一起删除turbolink,它可以工作但是Tumpolinks可以更快地在你的web应用程序中建立以下链接,据我所知,在大多数Rails项目中使用它。所以试着看看是否有解决方法?看起来像是一件非常典型的事情。
编辑3:
我添加了jQuery-turbolinks
的Gemfile
gem 'jquery-turbolinks'
JavaScript清单文件,按此顺序:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
确认不止一次弹出。必须有办法解决它?
编辑4: 我发现了这个问题。 HTML中的%head正好在%html下并没有正确缩进,所以application.js和其他包含在正文中而不是head部分所以而不是
!!! 5
%html
%head
%title Recipe App
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true
= csrf_meta_tags
应该是
!!! 5
%html
%head
%title Recipe App
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true
= csrf_meta_tags
答案 0 :(得分:9)
jquery-turbolinks 不应该是必要的;没有它我的应用程序正常工作......
你确定:
javascript_include_tag ...
部分中有<head>
行吗?javascript_include_tag ...
行?<强>背景强>:
您遇到的问题是每次 turbolinks 页面加载时都会调用 jquery_ujs 设置,导致安装重复的处理程序。
由于 turbolinks 页面加载只是替换文档的<body>
部分,您必须在<body>
内部执行某些操作,以触发 jquery_ujs 设置...
另请参阅以下答案:https://stackoverflow.com/a/18260585/211060和https://stackoverflow.com/a/4475479/211060
答案 1 :(得分:3)
也许你要包含rails.js的多个副本?
结帐this发布,看看是否能解决您的问题。
答案 2 :(得分:2)
您应该将被删除的id
的{{1}}作为参数传递给recipe
,可能如下:
recipe_path
如果没有传递对象,我猜它正在删除许多记录。
答案 3 :(得分:2)
我遇到了类似的问题并在发现错误后解决了: -
layout
包含application.js
partial
再次包括已jquery.min
application.js
already included
getScript()
多次 ..每个事件应该只有一次。希望这有帮助。