Rails 4:有没有人遇到过 jquery_ujs mangling callback url,它会中断 ajax 屏幕更新?
Rails 4: Has anyone encountered jquery_ujs mangling callback url, which breaks ajax screen update?
Catch-22——如果我在我的应用程序中加载 jquery_ujs,在执行时我观察到 jquery_ujs 代码从 rails 中提取了错误的 path/url 值,当它从服务器请求不存在的 url 时产生一个安静的 (e) 。
如果我不在 application.js 中加载 jquery_ujs,回调 url 不会被破坏,并且页面会按预期更新,但我会放弃 rails.js.嘘.
rails 的新手。我不知道答案是否就在眼前。也许是。我有 gem 碰撞问题吗?想法?建议?
可能相关:使用 Google 地图 api。地图上的活跃听众-canvas.
application.js (w/o jquery_ujs)
//= require jquery
//= require bootstrap
//= require turbolinks
//= require_tree .
(rails.js 在树中 不是 )
宝石文件
source 'https://rubygems.org'
ruby '1.9.3'
gem 'bcrypt', '3.1.7'
gem 'faker', '1.4.2'
gem 'carrierwave', '0.10.0'
gem 'mini_magick', '3.8.0'
gem 'fog', '~> 1.23.0', require: 'fog/aws/storage'
gem 'rails', '4.1.4'
gem 'pg'
platforms :mswin do
# gems specific to windows
gem 'tzinfo'
end
gem 'geocoder', '1.2.6'
gem 'validate_url'
gem 'country_select', '~> 2.1.0'
gem 'will_paginate', '3.0.7'
gem 'bootstrap-will_paginate','0.0.10'
gem 'bootstrap-sass', '3.3.1'
gem 'simple_form', '~> 3.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'rails-html-sanitizer', '1.0.1'
gem 'sdoc', '~> 0.4.0', group: :doc
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# gem 'debugger', group: [:development, :test]
group :development do
gem 'spring'
end
group :assets do
# NTS sprockets-rails claims to include this gem 'sass-rails'
# NTS sprockets-rails claims to include this gem 'coffee-rails', '~> 4.0.1'
gem 'sprockets-rails', '~> 2.2.0', :require => 'sprockets/railtie'
gem 'uglifier', '>= 1.3.0'
end
group :test do
gem 'minitest-reporters', '1.0.5'
gem 'mini_backtrace', '0.1.3'
gem 'guard-minitest', '2.3.1'
end
group :production do
gem 'rails_12factor', '0.0.2'
gem 'unicorn', '4.8.3'
end
尝试了没有 Google 加载地图 API DOM 侦听器且没有 Turbolinks 的瘦应用程序版本。 Ajax 有效。将 Google Map API 放回去,ajax 仍然有效。 Turbolinks 重新加入并 ajax 损坏。
我通过执行以下操作恢复了 Turbolinks 并且 DOM 侦听器回调工作:
已将 rails 更新到 4.2.0(无论如何都需要这样做)
已将 jquery_rails 及其运行时依赖项添加到 gem 文件
gem 'jquery-rails', '~> 4.0.3'
gem 'rails-dom-testing', '~> 1.0.5'
gem 'railties', '~> 4.2.0'
gem 'thor', '~> 0.19.1'
gem 'nokogiri'
gem 'activesupport', '~> 4.2.0'
Application.js
//= 要求 jquery
//= 要求 jquery.turbolinks
//= 要求 jquery_ujs
//= 要求 bootstrap
//= 需要 turbolinks
//= require_tree .
Javascript 挂钩
destroy.js
// Ajax handlers, destroy a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/follow')) %>");
$("#followers").html('<%= @user.followers.count %>');
create.js
// Ajax handler, create a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');
Turbolinks 是您需要做出明智的使用决定的东西。它有优点也有缺点。确实存在问题,但我暂时坚持。
已添加
发布另一个问答,进一步阐明这个棘手的问题:
Catch-22——如果我在我的应用程序中加载 jquery_ujs,在执行时我观察到 jquery_ujs 代码从 rails 中提取了错误的 path/url 值,当它从服务器请求不存在的 url 时产生一个安静的 (e) 。
如果我不在 application.js 中加载 jquery_ujs,回调 url 不会被破坏,并且页面会按预期更新,但我会放弃 rails.js.嘘.
rails 的新手。我不知道答案是否就在眼前。也许是。我有 gem 碰撞问题吗?想法?建议?
可能相关:使用 Google 地图 api。地图上的活跃听众-canvas.
application.js (w/o jquery_ujs)
//= require jquery
//= require bootstrap
//= require turbolinks
//= require_tree .
(rails.js 在树中 不是 )
宝石文件
source 'https://rubygems.org'
ruby '1.9.3'
gem 'bcrypt', '3.1.7'
gem 'faker', '1.4.2'
gem 'carrierwave', '0.10.0'
gem 'mini_magick', '3.8.0'
gem 'fog', '~> 1.23.0', require: 'fog/aws/storage'
gem 'rails', '4.1.4'
gem 'pg'
platforms :mswin do
# gems specific to windows
gem 'tzinfo'
end
gem 'geocoder', '1.2.6'
gem 'validate_url'
gem 'country_select', '~> 2.1.0'
gem 'will_paginate', '3.0.7'
gem 'bootstrap-will_paginate','0.0.10'
gem 'bootstrap-sass', '3.3.1'
gem 'simple_form', '~> 3.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'rails-html-sanitizer', '1.0.1'
gem 'sdoc', '~> 0.4.0', group: :doc
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# gem 'debugger', group: [:development, :test]
group :development do
gem 'spring'
end
group :assets do
# NTS sprockets-rails claims to include this gem 'sass-rails'
# NTS sprockets-rails claims to include this gem 'coffee-rails', '~> 4.0.1'
gem 'sprockets-rails', '~> 2.2.0', :require => 'sprockets/railtie'
gem 'uglifier', '>= 1.3.0'
end
group :test do
gem 'minitest-reporters', '1.0.5'
gem 'mini_backtrace', '0.1.3'
gem 'guard-minitest', '2.3.1'
end
group :production do
gem 'rails_12factor', '0.0.2'
gem 'unicorn', '4.8.3'
end
尝试了没有 Google 加载地图 API DOM 侦听器且没有 Turbolinks 的瘦应用程序版本。 Ajax 有效。将 Google Map API 放回去,ajax 仍然有效。 Turbolinks 重新加入并 ajax 损坏。
我通过执行以下操作恢复了 Turbolinks 并且 DOM 侦听器回调工作:
已将 rails 更新到 4.2.0(无论如何都需要这样做)
已将 jquery_rails 及其运行时依赖项添加到 gem 文件
gem 'jquery-rails', '~> 4.0.3'
gem 'rails-dom-testing', '~> 1.0.5'
gem 'railties', '~> 4.2.0'
gem 'thor', '~> 0.19.1'
gem 'nokogiri'
gem 'activesupport', '~> 4.2.0'
Application.js
//= 要求 jquery
//= 要求 jquery.turbolinks
//= 要求 jquery_ujs
//= 要求 bootstrap
//= 需要 turbolinks
//= require_tree .
Javascript 挂钩
destroy.js
// Ajax handlers, destroy a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/follow')) %>");
$("#followers").html('<%= @user.followers.count %>');
create.js
// Ajax handler, create a following relationship
$("#follow_form").html("<%= escape_javascript(render('/users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');
Turbolinks 是您需要做出明智的使用决定的东西。它有优点也有缺点。确实存在问题,但我暂时坚持。
已添加
发布另一个问答,进一步阐明这个棘手的问题: