Rails 3.1 с Asset Pipeline, link_to: подтвердить сообщение, показывающее дважды? - PullRequest
16 голосов
/ 16 августа 2011

Хорошо, я видел этот вопрос о том, что эта проблема вызвана множественными ссылками 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/,и звездочки, кажется, находят те в порядке.Я также искал файл application.js, который обслуживает sprockets, и 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 запускаться дважды?

EDIT : Ранее я видел это на RC5 Rails 3.1, но теперь я также вижу его на Rails 3.1 актуальным.

Ответы [ 4 ]

25 голосов
/ 29 ноября 2011

Это произошло со мной, потому что я запустил 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.Это приведет к тому, что файлы сценариев будут снова обслуживаться динамически.

4 голосов
/ 07 ноября 2011

Это происходило и со мной тоже. Удаление "// = require_tree." из application.js исправил это.

0 голосов
/ 24 ноября 2011

Упомяните имя jquery и jquery_ujs с версией в application.js, если все еще не тренировка, тогда возьмите сжатую версию jquery и jquery_ujs.

или

Добавьте gem 'jquery-rails' в ваш gemfile и попробуйте.

0 голосов
/ 04 октября 2011

Возможно, у вас есть файл rails.js.Удалите его и попробуйте снова.Это должно работать.

FoN

...