jQuery-turbolinks - link_to 确认:在 Rails 中弹出几次

jQuery-turbolinks - link_to confirm: pops up several times times in Rails

我有一个典型的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 并点击删除,然后它给了我一次确认并删除了食谱。

但是,如果我从典型类型的索引转到相同的显示页面。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 它会起作用 butTurbolinks 使您的 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 和其他部分包含在正文中而不是头部部分所以而不是

!!! 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         

你应该将被删除的recipeid作为参数传递给recipe_path,大概如下:

= link_to "Delete", recipe_path(recipe), method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"  

没有传递对象,我猜它正在删除很多记录。

也许您包含了 rails.js 的多个副本?

检查 this post 看看是否能解决您的问题。

jquery-turbolinks 真的没有必要;没有它我的应用程序可以正常工作...

您确定:

  • 你的 html?
  • <head> 部分有 javascript_include_tag ...
  • 你只有一个 javascript_include_tag ... 行?

背景:

您遇到的问题是 jquery_ujs 设置在每个 turbolinks 页面加载时被调用,导致重复的处理程序被安装。 由于 turbolinks 页面加载只是替换了文档的 <body> 部分,因此您必须在 <body> 中做一些触发 jquery_ujs设置...

另请参阅这些答案: and

我遇到了这个类似的问题并在发现错误后解决了:-

  1. 我有 layout 包括 application.js
  2. 我的 partial 再次包含 jquery.min,它已经包含在 application.js already included
  3. 我在几个 js 文件中使用了 getScript()多次..每个事件应该只使用一次。

希望对您有所帮助。