我有一个新的Rails 4应用程序,它不包含自定义Javascript - 文件夹app/assets/javascripts
,lib/assets/javascripts
并且vendor/assets/javascripts
都是空的(除了app/assets/javascripts/application.js
).
当我点击应用程序时,我一直jquery-ujs has already been loaded!
在JS控制台中收到错误.每次我点击"后退"按钮时都会发生这种情况,有时当我点击正常链接时(虽然我无法让它始终如一地发生).
application.js中:
//= require jquery //= require jquery_ujs //= require twitter/bootstrap //= require turbolinks //= require_tree .
当我从application.js中删除turbolinks时,我不再收到错误...所以turbolinks似乎是罪魁祸首.
这是turbolinks的错误,还是我做错了什么?
这是我的Gemfile:
source 'https://rubygems.org' ruby '2.0.0' gem 'rails', '4.0.0' gem 'active_model_serializers' gem 'aws-sdk' gem 'bootstrap-sass-rails' gem 'coffee-script-source', '1.5.0' gem 'coffee-rails', '~> 4.0.0' gem 'devise' gem 'factory_girl_rails', '4.1.0' gem 'figaro' gem 'font-awesome-sass-rails' gem 'jbuilder', '~> 1.2' gem 'jquery-rails' gem 'paperclip' gem 'paperclip-meta', github: 'y8/paperclip-meta' gem 'pg' gem 'sass-rails', '~> 4.0.0' gem 'turbolinks' gem 'uglifier', '>= 1.3.0' group :production do gem 'rails_12factor' end group :doc do gem 'sdoc', require: false end group :test do gem 'capybara', '2.1.0' end group :development, :test do gem 'childprocess', '0.3.9' gem 'debugger' gem 'faker', '~> 1.2.0' gem 'json_spec' gem 'rspec-rails' gem 'rspec-mocks' end group :development do gem 'annotate' gem 'hirb' gem 'wirb' end
require
在application.js中改变s 的顺序似乎也没有帮助.
最可能的解释是您在页面中包含脚本body
.
有关详细信息,请参阅此问题:https://github.com/rails/turbolinks/issues/143
来自turbolinks自述文件:
根据切换到Turbolinks的经验法则,将所有javascript标签移到内部
head
,然后向后工作,只有在绝对必要时才将javascript代码移回正文.如果您在身体中有任何脚本标签,则不希望重新评估,那么您可以将该data-turbolinks-eval
属性设置为false
:
<script type="text/javascript" data-turbolinks-eval=false> console.log("I'm only run once on the initial page load"); </script>
我遇到了同样的问题,经过一些打击和试验后,我发现javascript文件的顺序很重要.
工作顺序是
//= require jquery //= require jquery_ujs //= require jquery.turbolinks //= require turbolinks
希望,这个解决方案能帮助别人.