Rails 3.1 with Asset Pipeline,link_to:确认消息显示两次?

时间:2011-08-16 19:48:04

标签: jquery ruby-on-rails ruby-on-rails-3.1 asset-pipeline sprockets

好的,所以我看到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上看到了它。

4 个答案:

答案 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

相关问题