2012-04-19 8 views
12

Sto cercando di trovare un modo per rilevare quando l'utente ha premuto il pulsante Indietro/Avanti nel proprio browser.percorsi di backbone - rilevamento del pulsante di ritorno del browser premere

Sto usando il backbone per gestire i percorsi, insieme al backbone per rendere le mie viste.

Il problema è che non riesco a collegarmi a questo evento di cambio pagina da nessuna parte.

Ho provato a mettere un registro nella mia funzione di inizializzazione per le mie visualizzazioni .. ma non è scattato quando uso il pulsante Indietro.

Non sono davvero sicuro su come altro rilevare questa modifica della pagina.

risposta

-2

È necessario utilizzare Backbone.Router e assicurarsi di non dimenticare Backbone.history.start() all'avvio dell'applicazione.

Alcune informazioni utili si possono trovare here e here

In realtà il secondo link non è un articolo, ma un blog. E il tizio che l'ha scritto sembra davvero sapere molto sull'argomento.

UPD: L'idea è che il fuoco del router di backbone ha vincolato i metodi quando l'URL è cambiato. Quindi dovresti solo mettere la tua logica in questo metodo e in questo modo sarai in grado di seguirlo. Forse è un modo non molto automatico, e ci vorrà per scrivere del codice, ma penso che dovrebbe funzionare.

+2

Sì, l'ho letto. L'idea è che il fuoco del router di backbone legasse i metodi quando il tuo URL cambia. Quindi dovresti solo mettere la tua logica in questo metodo e in questo modo sarai in grado di seguirlo. Forse è un modo non molto automatico, e ci vorrà per scrivere del codice, ma penso che dovrebbe funzionare. – Ph0en1x

+0

@ Ph0en1x L'utente che utilizza l'oggetto Cronologia di Backbone può fornire una soluzione poiché monitora l'evento "popstate" che viene generato quando si preme il pulsante Indietro durante la navigazione all'interno del sito. Tuttavia, la tua risposta non chiarisce che è quello che stai dicendo, né come OP risolverebbe il suo problema usando Backbone.History. –

+1

Divertente, ci sono molti aspetti negativi per quella risposta. Tuttavia, la risposta si corregge intenzionalmente anche alla fine del 2015. Ma sembra che le persone non vogliano leggere attentamente e non vogliano pensare. Vogliono solo copiare e incollare lo snippet. – Ph0en1x

1

è possibile estendere il Backbone.Router e sovraccaricare il route e il metodo open. Hai tutti i cambi di pagina gestiti in questi due metodi. Quindi, basta ricopiarli dal file backbone e giocarci.

0

Ovviamente anche GitHub non sa come individuare quale pulsante è stato premuto;) Usano questo codice:

slideTo: function (a) { 
     var b = this.pathFromURL(a), 
     c = this.frameForPath(b), 
     d = $("#slider .frame-center").attr("data-path") || ""; 
     c.is(".frame-center") || (d == "/" || b.split("/").length > d.split("/").length ? 
     this.slideForwardTo(a) : this.slideBackTo(a)) 
} 
10

È possibile associare un callback per Backbone route evento:

Backbone.history.on('route', function() { 
     // Do your stuff here 
    }); 

È puoi usare Backbone.history.getFragment() per sapere se sei in piedi.

+0

Manca una parentesi di chiusura) alla fine del tuo snippet – fadomire

3

Quando si preme il pulsante Indietro, viene attivato un evento popstate.

sto usando questo pezzo di codice:

// listening for the browser's back button 
window.addEventListener('popstate', function(e) { 
    router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true }); 
}); 
Problemi correlati