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

时间:2015-04-18 04:41:24

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

我有一个典型的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         

4 个答案:

答案 0 :(得分:9)

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

你确定:

  • 您的html的javascript_include_tag ...部分中有<head>行吗?
  • 您只有一条javascript_include_tag ...行?

<强>背景

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

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

答案 1 :(得分:3)

也许你要包含rails.js的多个副本?

结帐this发布,看看是否能解决您的问题。

答案 2 :(得分:2)

您应该将被删除的id的{​​{1}}作为参数传递给recipe,可能如下:

recipe_path

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

答案 3 :(得分:2)

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

  1. 我的layout包含application.js
  2. 我的partial再次包括已jquery.min application.js
  3. 中包含的already included
  4. 我在少数js文件中使用getScript() 多次 ..每个事件应该只有一次。
  5. 希望这有帮助。