2013-06-10 7 views
14

Bene, come dice il titolo più o meno. Sto usando la gemma Turbolinks nella mia applicazione Rails e sto avendo un po 'di problemi con il pulsante "browser indietro". I miei javascript funzionano fino a quando non faccio clic sul mio browser, quindi smette di funzionare. Se faccio clic su un collegamento nella mia app o ricarico la pagina, riprende a funzionare.Cliccando su "indietro" nel browser si disabilita il mio codice javascript se sto usando Turbolinks in Rails

Ant idee come risolvere questo?

risposta

23

Due soluzioni per Turbolinks Classic:

impostare la cache a 0 in modo che non vengono memorizzati nella cache le pagine utilizzando HTML5 Storia.

Turbolinks.pagesCached(0); 

Un'altra soluzione è ascoltare l'evento "pagina: ripristina" e chiamare il metodo di inizializzazione. Quest'ultima soluzione è più performante.

document.addEventListener("page:restore", function() { 
    app.init(); 
}); 
+0

ho ricevuto giù voti per questo. È cambiato con le versioni più recenti? –

+3

Ciao, non ho fatto downvote, ma come puoi vedere [qui] (https://github.com/turbolinks/turbolinks/issues/135) 'page: restore' non si attiva più su Turbolinks 5. Inoltre,' Turbolinks .pagesCached(); 'sembra essere morto, penso che probabilmente esiste solo in Turbolinks Classic, non Turbolinks 5 ... – stephenmurdoch

+0

né aiuto ora –

19

Il jquery-turbolinks gemma non supporta Turbolinks 5 più, in modo che la soluzione è deprecato in questo momento.

Se desideri disabilitare la memorizzazione nella cache dei turbolinks, aggiungi questa meta alla tua pagina;

<meta name="turbolinks-cache-control" content="no-cache"> 
1

È possibile trovare la risposta nel prossimo turbolinks issue discussion. Per me, la prossima soluzione ha funzionato - elemento inizializzato da JS (nel mio caso discesa scelto) con successiva eliminazione:

document.addEventListener("turbolinks:before-cache", function() { 
    $('.chosen-select').chosen('destroy'); 
})