jQuery-turbolinks - link_to 确认 : pops up several times times in Rails

标签 jquery ruby-on-rails ruby-on-rails-4 turbolinks

我有一个典型的 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全部删除,它会起作用,但Turbolinks可以使您的Web应用程序中的以下链接更快,据我所知,大多数Rails项目都使用Turbolinks。所以想看看是否有解决办法?看起来是一件非常典型的事情。

编辑3:

我添加了 jQuery-turbolinks

gem 文件

gem 'jquery-turbolinks'

JavaScript list 文件,按此顺序:

//= 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         

最佳答案

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

您确定:

  • 您有javascript_include_tag ... <head> 中的行您的 html 的一部分?
  • 你只有一个javascript_include_tag ...线?
<小时/>

背景:

您遇到的问题是,在每个 turbolinks 页面加载时都会调用 jquery_ujs 设置,从而导致安装重复的处理程序。 由于 turbolinks 页面加载只是替换 <body>作为文档的一部分,您必须在 <body> 中执行某些操作触发jquery_ujs设置...

另请参阅以下答案:https://stackoverflow.com/a/18260585/211060https://stackoverflow.com/a/4475479/211060

关于jQuery-turbolinks - link_to 确认 : pops up several times times in Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712972/

相关文章:

ruby-on-rails - 创建 FactoryGirl 对象时绕过 Rails 验证

ruby-on-rails - Rails 4 simple_form has_many 通过复选框不保存

sql - 查找 child 最多的家长记录(有很多关系)

ruby-on-rails - 允许在 DeviseTokenAuth 强参数中传递一个数组

ruby-on-rails - 保存到模型时绕过 Carrierwave 上传程序

javascript - 使用 jQuery 设置背景位置

jQuery slider 的 handle 不滑动

ruby-on-rails - Carrierwave 程序上传

javascript - 如何从 anchor 标记将多个值传递到 Bootstrap 弹出窗口?

php - 设置 WooCommerce 结算公司后禁用特定付款方式