Ответ 1
Похоже, что обработчик подтверждения Javascript в rails.js прилагается дважды.
Не могли бы вы случайно включить две копии rails.js через дублирование помощника javascript_include_tag?
Этот тег с рельсами 3
<%= link_to 'Destroy', item, :method => :delete,:confirm=>'Are you sure?' %>
создает этот html
<a href="/news/3" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
Запись удалена, проблема в том, что всплывающее окно появляется дважды.
Что может быть причиной этого?
Похоже, что обработчик подтверждения Javascript в rails.js прилагается дважды.
Не могли бы вы случайно включить две копии rails.js через дублирование помощника javascript_include_tag?
У меня была такая же проблема, и я потратил большую часть часа на это. Я нашел решение в своей ситуации, и я решил, что поделюсь им, если он поможет...
Моя проблема заключалась в том, что у меня был
config.assets.debug = true
в config/environment/development.rb
Изменение этой строки на
config.assets.debug = false
исправлено дублирование подтверждения для меня. Я нашел соответствующую информацию в этом руководстве по рельсам для конвейера активов. Надеюсь, это поможет!
Я использовал для включения javascript_include_tag
в нижней части моего haml-layout файла.
С Rails4 и Turbolinks случается, что:
Я решил проблему, перемещая javascript_include_tag
снизу в <head>
Я использую Rails 4, и ни один из ответов не работал у меня, однако следующее сработало... Я изменил строку:
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
to
<%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %>.
Отличные ответы здесь,
Но если вы все сделали и все равно получите эти двойные всплывающие окна, и если вы работаете в режиме разработки, проверьте, есть ли у вас public/assets
, загруженный скомпилированными активами.
Удаление public/assets/*
решает проблему.
Кажется, это ошибка в Rails. По-видимому, директивы в application.js не только расширены в отдельные файлы, когда включен режим отладки, но также включены в application.js. Я не смотрел на код Rails для этого, но предполагаю, что это связано с тем, что application.js является файлом JavaScript по умолчанию. Если вы переименуете этот файл на что-то еще, скажем default.js, он будет в режиме отладки правильно включать файлы, указанные директивой, а default.js будет выводить только код JavaScript, который находится только в этом файле. Таким образом, не создается повторяющийся код.
Пример:
application.js
//= требуется jquery_ujs
Foo();
Результаты в:
1) jquery_ujs.js
2) application.js с содержимым jquery_ujs и foo()
default.js
//= требуется jquery_ujs
Foo();
Результаты в:
1) jquery_ujs.js
2) default.js с foo()
У меня была та же проблема с Rails 3.2.12, но просто обновление до 3.2.13 решило эту проблему для меня.
В моем случае (Rails 3.2.13) мне пришлось удалить rails.js, чтобы исправить ту же проблему.
Я явно не ссылался на rails.js и не менял config.assets.debug.
В моем случае jQuery дважды загружался из-за строки
//= require_tree .
Чтобы предотвратить эту ошибку в application.js и application.css, я использую для создания подкаталога app/assets/javascript/autorequire
, а вместо require_tree .
я делаю require_tree ./autorequire
.
Итак, файлы в app/assets/javascript
и app/assets/stylesheets
не включаются автоматически/случайно. Я помещаю все мои личные .css и .js файлы в подкаталог, и они включаются неявно. Но я могу определить, какие файлы из верхнего пути должны быть включены и в каком порядке.
Так как я делаю это, у меня никогда не было проблем с активами, которые не были загружены, как я ожидаю.
Так что для меня это было потому, что я определил удаленные данные, а не просто удаленные.
IE
data: {remote: true,...}
вместо
remote: true, data: {...}
надеюсь, что это поможет.
В моем случае это было то, что приложение содержало как "mootools ujs", так и "jquery ujs". Я избавился от mootools один, и теперь я вижу только одно подтверждение.
просто удалите турбовинты, которые работали для меня в rails4
Попробуйте запустить
rake assets:precompile ENV=development
или
rake assets:precompile ENV=production
Удалить
//= require jquery
//= require jquery_ujs
//= require_tree .
из app/assets/javascripts/application.js
. Несмотря на комментарий, он загружает эти js файлы. Это работает для меня.