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】:

您应该将被删除的recipeid 作为参数传递给recipe_path,可能如下:

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

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

【讨论】:

很好地抓住了我没有传递配方对象但由于某种原因没有解决它。还记得如果我刷新显示页面,确认框只会弹出一次......所以它必须对我猜的 turbolinks 做些什么?【参考方案4】:

我遇到了类似的问题并在识别错误​​后解决了:-

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

希望这会有所帮助。

【讨论】:

以上是关于jQuery-turbolinks - link_to 确认:在 Rails 中多次弹出的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据休息和jpa @OneToMany重复“_links”

Link

css media__hide_print_links.css

scss _link.scss

scss _stretch-link.scss

LC_328. Odd Even Linked List