Turbolinks evita que los $(document).ready()
eventos normales se activen en todas las visitas a la página, además de la carga inicial, como se explica aquí y aquí . Sin embargo, ninguna de las soluciones de las respuestas vinculadas funciona con Rails 5. ¿Cómo puedo ejecutar código en cada visita a la página como en versiones anteriores?
84
on('ready turbolinks:load')
contrario, tengo algunos problemas en algunas páginasJS nativo:
document.addEventListener("turbolinks:load", function() { console.log('It works on each visit!'); });
fuente
En rails 5 la solución más sencilla es utilizar:
$(document).on('ready turbolinks:load', function() {});
En lugar de
$(document).ready
. Funciona de maravilla.fuente
ready
a la lista, de lo contrario, la función se ejecutará dos veces. Como dijo github.com/turbolinks/turbolinks/#observing-navigation-events , debe hacerlo así:javascript $(document).ready(function() { $(document).on('turbolinks:load', function() {} ) })
$(document).ready
se activa, al menos en mis propios escenarios, no lo necesitaríaturbolinks:load
ready
se activa el evento. Si hay enlaces turbo, el código se llama dos vecesEsta es mi solución, anular
jQuery.fn.ready
, luego$(document).ready
funciona sin ningún cambio:jQuery.fn.ready = (fn)-> $(this).on 'turbolinks:load', fn
fuente
document
devoluciones de llamada. ¿Por qué el voto negativo? Esto debería ser seguro siempre que se utilicen turbolinks en toda la aplicación, ¿verdad?(Para coffeescript)
Yo suelo:
$(document).on 'turbolinks:load', ->
En vez de:
$(document).on('turbolinks:load', function() {...})
fuente
Aquí hay una solución que funciona para mí, desde aquí :
Instalar en pc
gem 'jquery-turbolinks'
agregue este archivo .coffee a su aplicación: https://github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee
asígnele el nombre turbolinks-compatibility.coffee
en application.js
//= require jquery //= require jquery_ujs //= require jquery.turbolinks //= require turbolinks //= require turbolinks-compatibility
fuente
production
env? ¿Lo has probado? Algunas personas dicen que funciona bien en eldevelopment
modo.Mientras esperamos la solución de esta joya realmente genial, pude seguir adelante modificando lo siguiente;
addCallback: (callback) -> if $.turbo.isReady callback($) $document.on 'turbo:ready', -> callback($)
a:
addCallback: (callback) -> if $.turbo.isReady callback($) $document.on 'turbolinks:load', -> callback($)
Todavía no sé lo que esto no resuelve, pero pareció funcionar bien en la inspección inicial.
fuente
Utilice los jquery-turbolinks de gemas ligeras .
Hace que
$(document).ready()
funcione con Turbolinks sin cambiar el código existente.Alternativamente, puede cambiar
$(document).ready()
a uno de:$(document).on('page:fetch', function() { /* your code here */ }); $(document).on('page:change', function() { /* your code here */ });
dependiendo de cuál sea más apropiado en su situación.
fuente