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.

19
demandé sur GMA 2013-12-19 18:56:30

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

turbolinks readme:

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'attribut false:

<script type="text/javascript" data-turbolinks-eval=false>
  console.log("I'm only run once on the initial page load");
</script>
53
répondu Puhlze 2014-01-22 01:10:39

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.

5
répondu lokeshjain2008 2014-08-04 22:05:39

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' %>

0
répondu Fatima Haidar 2017-11-28 10:33:18