jQuery-turbolinks - link_to 确认:在 Rails 中多次弹出
Posted
技术标签:
【中文标题】jQuery-turbolinks - link_to 确认:在 Rails 中多次弹出【英文标题】:jQuery-turbolinks - link_to confirm: pops up several times times in Rails 【发布时间】:2015-06-25 02:49:25 【问题描述】:我有一个典型的 CRUD 操作应用程序
apps/views/recipe/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: 如果我一起删除 turbolinks,它会起作用 buttTurbolinks 可以更快地跟踪您的 Web 应用程序中的链接,据我所知,大多数 Rails 项目都使用它。所以想看看是否有解决方法?这似乎是一件非常典型的事情。
编辑 3:
我添加了 jQuery-turbolinks
宝石文件
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
【问题讨论】:
您是否加载了任何自定义 javascript/coffeescript? @fylooi 不是所有标准准系统应用程序。 【参考方案1】:jquery-turbolinks 应该没有必要;没有它,我的应用程序也能正常工作...
你确定:
您的 html 的<head>
部分中有 javascript_include_tag ...
行吗?
您只有一个javascript_include_tag ...
行吗?
背景:
您遇到的问题是每次 turbolinks 页面加载都会调用 jquery_ujs 设置,从而导致安装重复的处理程序。
由于 turbolinks 页面加载只是替换了文档的 <body>
部分,因此您必须在 <body>
中执行触发 jquery_ujs 设置的操作...
另请参阅以下答案:https://***.com/a/18260585/211060 和 https://***.com/a/4475479/211060
【讨论】:
是的,你是对的.. javascript_include_tag 不在头部.. 代码的缩进不正确【参考方案2】:也许您包含多个 rails.js 副本?
查看this 的帖子,看看是否能解决您的问题。
【讨论】:
【参考方案3】:您应该将被删除的recipe
的id
作为参数传递给recipe_path
,可能如下:
= link_to "Delete", recipe_path(recipe), method: :delete, data: confirm: "Are you sure?" , class: "btn btn-default"
如果没有传递对象,我猜它正在删除许多记录。
【讨论】:
很好地抓住了我没有传递配方对象但由于某种原因没有解决它。还记得如果我刷新显示页面,确认框只会弹出一次......所以它必须对我猜的 turbolinks 做些什么?【参考方案4】:我遇到了类似的问题并在识别错误后解决了:-
-
我有
layout
和 application.js
包括
我的partial
再次包含jquery.min
,它已经包含在application.js
already included
中
我在几个 js 文件中使用了getScript()
多次。每个事件应该只有一次。
希望这会有所帮助。
【讨论】:
以上是关于jQuery-turbolinks - link_to 确认:在 Rails 中多次弹出的主要内容,如果未能解决你的问题,请参考以下文章
Spring数据休息和jpa @OneToMany重复“_links”