track rails data callbacks javascript jquery ruby-on-rails turbolinks

javascript - rails - turbolinks callbacks



Turbolinks causando un error "jquery-ujs ya se ha cargado!" (3)

Tengo una nueva aplicación Rails 4 que no contiene Javascript personalizado: las carpetas app/assets/javascripts , lib/assets/javascripts y vendor/assets/javascripts están vacías (aparte de app/assets/javascripts/application.js ).

Cuando hago clic alrededor de la aplicación, sigo recibiendo el error ¡ jquery-ujs has already been loaded! en la consola js. Ocurre cada vez que presiono el botón "atrás", y algunas veces cuando hago clic en un enlace normal (aunque no puedo hacer que suceda de manera consistente).

aplicacion.js:

//= require jquery //= require jquery_ujs //= require twitter/bootstrap //= require turbolinks //= require_tree .

Cuando quito turbolinks de application.js, dejo de recibir el error ... por lo que turbolinks parece ser el culpable.

¿Es esto un error con turbolinks, o estoy haciendo algo mal?

Aquí está mi 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

Cambiar alrededor del orden de los require en application.js tampoco parece ayudar.


La explicación más probable es que está incluyendo sus scripts en el body la página.

Vea este tema para más información: https://github.com/rails/turbolinks/issues/143

De los turbolinks readme :

Como regla general cuando cambie a Turbolinks, mueva todas sus etiquetas javascript dentro de la head y luego trabaje hacia atrás, solo mueva el código javascript hacia el cuerpo si es absolutamente necesario. Si tiene etiquetas de secuencia de comandos en el cuerpo que no desea volver a evaluar, puede establecer el atributo data-turbolinks-eval en false :

<script type="text/javascript" data-turbolinks-eval=false> console.log("I''m only run once on the initial page load"); </script>


Me enfrenté al mismo problema y, después de realizar algunos intentos y pruebas, encontré que la secuencia de archivos javascript es importante.

La secuencia de trabajo es

//= require jquery //= require jquery_ujs //= require jquery.turbolinks //= require turbolinks

Espero, esta solución ayudará a alguien.


Para mí, había incluido estos escritos dos veces, así que se estaba cargando dos veces. Una vez en application.js //= require jquery y una vez en application.html.erb como etiqueta de script.