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

Cod*_*ack 15 jquery ruby-on-rails turbolinks ruby-on-rails-4

我有一个典型的CRUD操作应用程序

包含一行的apps/views/recipe/show.html.haml

= link_to "Delete", recipe_path, method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"    
Run Code Online (Sandbox Code Playgroud)

如果我在apps/views/recipe/new.html.haml中创建一个新配方并重定向到apps/views/recipe/show.html.haml并点击Delete,那么它会给我一次确认并删除配方.

但是,如果我从典型类型的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 
Run Code Online (Sandbox Code Playgroud)

不知道如何解决它,所以它不会弹出几次

编辑:即使我通过传递@recipe修复代码后仍然是相同的行为

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

编辑2: 如果我一起删除turbolinks它的工作原理buttTurbolinks在你的web应用程序中更快地生成以下链接,据我所知在大多数Rails项目中使用.所以试着看看是否有解决方法?看起来像是一件非常典型的事情.

编辑3:

我添加了jQuery-turbolinks

的Gemfile

gem 'jquery-turbolinks'
Run Code Online (Sandbox Code Playgroud)

JavaScript清单文件,按此顺序:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
Run Code Online (Sandbox Code Playgroud)

确认不止一次弹出.必须有办法解决它?

编辑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   
Run Code Online (Sandbox Code Playgroud)

它应该是

!!! 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         
Run Code Online (Sandbox Code Playgroud)

sev*_*rin 9

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

你确定:

  • 你有你的HTML部分的javascript_include_tag ...<head>吗?
  • 你只有一条javascript_include_tag ...线?

背景:

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

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