好的,所以我看到this question关于这个问题是由jQuery或Prototype的多个链接引起的,但我可以确认我只是链接到jQuery 一次整页。我的问题是:当我有link_to
确认删除时,弹出窗口显示两次。这是我模板中的适用代码(用Slim编写):
link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete)
我正在运行 Rails 3.1.0 并启用了资产管道,我的gem 'jquery-rails'
中有Gemfile
,以下内容位于application.js
文件(由Sprockets为资产管道编译)。
//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone'
我的underscore.js
目录中有backbone.js
和/vendor/assets/javascripts/
,sprockets似乎找不到这些。我还搜索了sprockets提供的application.js
文件,jQuery只在那里一次,jQuery UJS只在那里一次。这是我的页面呈现时的头部样子(我省略了显示的csrf-token
值,FWIW)。
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title>Administration</title>
<link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/assets/application.js" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="--token--omitted--" name="csrf-token" />
<script src="/assets/common/subdata.js" type="text/javascript"></script>
<link href="/assets/show.css" media="screen" rel="stylesheet" type="text/css" />
</head>
subdata.js
中有一些特定于Backbone的代码;没有什么可以选择再次包含jQuery。那是什么交易?我的项目中没有任何其他jQuery文件;它全部通过jquery-rails
宝石进行管理。是什么导致我的:confirm
方法两次开火?
编辑:我之前在Rails 3.1的RC5上看过这个,但现在我也在Rails 3.1上看到了它。
答案 0 :(得分:25)
这发生在我身上,因为我在我的开发环境中运行了rake assets:precompile
,导致public/assets/application.js
被创建。这使得/assets/application.js
的请求由此静态文件提供,该文件包含编译在一起的// require
中的所有public/assets/application.js
脚本,导致它们再次加载。
在开发模式下,<%= javascript_include_tag "application" %>
会扩展为多个<script>
标记,一个用于// require
行所需的每个文件,还有一个用于application.js
只包含自己的标记内容。
解决方案是手动删除整个public/assets
目录或使用assets:clean
rake任务。这将导致脚本文件再次动态提供。
答案 1 :(得分:4)
这也发生在我身上。删除“// = require_tree。”来自application.js修复它。
答案 2 :(得分:0)
在application.js中提及带有版本的jquery和jquery_ujs的名称,如果还没有运动,那么请使用jquery和jquery_ujs的压缩版本。
或
将gem'jquery-rails'添加到您的gemfile中然后尝试。
答案 3 :(得分:-1)
可能你有rails.js文件。删除它,然后再试一次。它必须工作。
FON