我有一个新的Rails 4应用程序,其中包含 no 自定义Javascript - 文件夹app/assets/javascripts
,lib/assets/javascripts
和vendor/assets/javascripts
都是空的(除了{{ 1}})。
当我点击应用程序时,我不断在JS控制台中收到错误app/assets/javascripts/application.js
。每次我点击“后退”按钮时都会发生这种情况,有时当我点击一个普通链接时(虽然我无法让它始终如一地发生)。
的application.js:
jquery-ujs has already been loaded!
当我从application.js中删除turbolink时,我不再收到错误了...所以turbolinks似乎是罪魁祸首。
这是turbolinks的错误,还是我做错了什么?
这是我的Gemfile:
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .
在application.js中改变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
的顺序似乎也没有帮助。
答案 0 :(得分:54)
最可能的解释是,您在页面body
中加入了脚本。
有关详情,请参阅此问题:https://github.com/rails/turbolinks/issues/143
根据经验,切换到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>
答案 1 :(得分:6)
我遇到了同样的问题,经过一些点击和试验后,我发现javascript文件的顺序很重要。
工作顺序是
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
希望,这个解决方案可以帮助别人。
答案 2 :(得分:1)
对我来说,我已经把这些书面写了两次,所以它加载了两次。一旦进入application.js setDefault(true)
,一次进入application.html.erb作为脚本标记。
答案 3 :(得分:0)
我遇到的问题是我在头部和身体中两次复制了<%= render'layouts / head'%> !!检查laouts / application.html.erb文件