Turbolinks provoquant un "jquery-ujs" a déjà été chargé!" erreur
j'ai une application newish Rails 4 qui contient aucun Javascript personnalisé - les dossiers app/assets/javascripts
, lib/assets/javascripts
et vendor/assets/javascripts
sont toutes vides (sauf app/assets/javascripts/application.js
).
quand je clique autour de l'application je continue d'obtenir l'erreur jquery-ujs has already been loaded!
dans la console JS. Cela se produit à chaque fois que j'appuie sur le bouton" Retour", et parfois quand je clique sur un lien normal (bien que je ne puisse pas faire en sorte que cela se produise de manière cohérente.)
application.js:
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .
Quand Je retirer les turbolinks de l'application.js, j'arrête d'avoir l'erreur... donc turbolinks semble être le coupable.
est-ce un bug avec turbolinks, ou est-ce que je fais quelque chose de mal?
Voici mon 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
changer l'ordre de la require
s en application.js ne semble pas aider non plus.
3 réponses
l'explication la plus probable est que vous incluez votre scripts dans la page body
.
Voir cette question de plus: https://github.com/rails/turbolinks/issues/143
en règle générale, lorsque vous passez à Turbolinks, Déplacez toutes vos Balises javascript à l'intérieur du
head
et puis travailler à l'envers, seulement en déplaçant le code javascript de nouveau dans le corps si c'est absolument nécessaire. Si vous avez des balises de script dans le corps, vous ne voulez pas être ré-évaluée, alors vous pouvez définir l'data-turbolinks-eval
l'attributfalse
:
<script type="text/javascript" data-turbolinks-eval=false>
console.log("I'm only run once on the initial page load");
</script>
j'ai fait face à la même question et après avoir fait quelques hit et trial j'ai trouvé la séquence de fichiers javascript questions.
la séquence de travail est
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
j'Espère, cette solution va aider quelqu'un.
Pour moi, j'avais compris ces écrit deux fois de sorte qu'il était en train de charger deux fois
<%= javascript_include_tag :application %>
<%= javascript_pack_tag 'application' %>