【问题标题】:Rails 3.1 with Asset Pipeline, link_to :confirm message showing twice?带有资产管道的 Rails 3.1,link_to :确认消息显示两次?
【发布时间】:2011-08-16 19:48:04
【问题描述】:

好的,所以我已经看到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 文件中(由资产管道的链轮)。

//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone' 

我的/vendor/assets/javascripts/ 目录中有underscore.jsbackbone.js,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 gem 进行管理。是什么导致我的 :confirm 方法触发两次?

编辑:我以前在 Rails 3.1 的 RC5 上看到过这个,但现在我在 Rails 3.1 上也看到过。

【问题讨论】:

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


    【解决方案1】:

    这发生在我身上,因为我在我的开发环境中运行了rake assets:precompile,导致创建了public/assets/application.js。这使得对 /assets/application.js 的请求将由该静态文件提供服务,该静态文件包含一起编译的 public/assets/application.js 中的所有 // require 脚本,导致它们再次被加载。

    在开发模式下,&lt;%= javascript_include_tag "application" %&gt; 将扩展为多个&lt;script&gt; 标签,// require 行所需的每个文件一个标签,application.js 只包含自己的内容一个标签。

    解决方案是手动删除整个public/assets 目录或使用assets:clean rake 任务。这将导致脚本文件再次被动态提供。

    【讨论】:

    • 我使用的是 Rails 3.0.10,它在安装 jquery-rails gem 并运行它的生成器后发生在我身上。 Rails.js 没有被移除,并且移除了那个固定的地雷。
    • 现在是我接受这个答案的时候了——这对我来说效果最好。另请注意,运行bundle exec rake assets:clean 将用于删除public/assets 目录。这主要是因为我还没有完全按照 Asset Pipeline 想要的最小摩擦方式编写和存储我的样式表。这就是我试图与众不同的结果,我猜……
    • 谢谢。不知道assets:clean,很高兴知道。接缝more or less the same thing,但接缝更正确。
    【解决方案2】:

    这也发生在我身上。删除“//= require_tree 。”从 application.js 修复它。

    【讨论】:

    • 这可能会导致您将同一个文件包含两次,一次由 javascript_include_tag 手动包含,另一次由 application.js 包含。首先确认如果是这种情况,您必须包含一次。
    【解决方案3】:

    在 application.js 中注明 jquery 和 jquery_ujs 的名称,如果仍然不锻炼,则使用 jquery 和 jquery_ujs 的压缩版本。

    将 gem 'jquery-rails' 添加到您的 gemfile 中,然后尝试。

    【讨论】:

    • jquery-rails gem 已经在我的 Gemfile 中(如我的问题中所述)。删除 jqueryjquery_ujs 完全删除了所有 Rails/jQuery 视图行为。
    【解决方案4】:

    可能你有 rails.js 文件。删除它并重试。它必须有效。

    FoN

    【讨论】:

    • 我的项目中没有rails.js 文件;不在app/assets/javascripts,不在public/javascripts,不在任何地方。也没有任何rails.js 文件的引用或断开的链接。
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2012-02-21
    相关资源
    最近更新 更多