2012-04-19 15 views
12

Estoy tratando de encontrar una manera de detectar cuando el usuario ha presionado el botón Atrás/Adelante en su navegador.rutas de la red troncal - detección del botón Atrás del navegador Presione

Estoy utilizando la red troncal para manejar las rutas, junto con la red troncal para representar mis vistas.

El problema es que no puedo conectarme a este evento de cambio de página desde cualquier lugar.

Intenté poner un registro en mi función de inicialización para mis vistas ... pero no se dispara cuando uso el botón Atrás.

Realmente no estoy seguro de cómo más detectar este cambio de página.

Respuesta

-2

Debe usar Backbone.Router y asegúrese de no olvidarse de Backbone.history.start() al iniciar su aplicación.

Parte de la información útil se puede encontrar here y here

En realidad el segundo enlace no es un artículo, pero un blog. Y el tipo que lo escribió realmente parece saber mucho sobre el tema.

UPD: La idea es que el enrutador de la red troncal mezcle los métodos enlazados cuando cambie su url. Así que solo debes poner tu lógica en este método y de esta manera podrás rastrear eso. Tal vez no sea una manera muy automática, y tomará escribir un código, pero creo que debería funcionar.

+2

Sí, lo leí. La idea es que el enrutador de la red troncal integre los métodos enlazados cuando cambie tu url. Así que solo debes poner tu lógica en este método y de esta manera podrás rastrear eso. Tal vez no sea una manera muy automática, y tomará escribir un código, pero creo que debería funcionar. – Ph0en1x

+0

@ Ph0en1x Tiene razón en que el uso del objeto Historial de Backbone puede proporcionar una solución, ya que supervisa el evento 'popstate' que se activa cuando se presiona el botón Atrás cuando se navega dentro del sitio. Sin embargo, su respuesta no deja en claro que eso es lo que está diciendo ni cómo OP resolvería su problema al utilizar Backbone.History. –

+1

Es curioso, hay muchos inconvenientes para esa respuesta. Sin embargo, la respuesta fue intencionalmente correcta incluso a finales de 2015. Pero parece que las personas no quieren leer con cuidado y no quieren pensar. Solo quieren copiar y pegar un fragmento. – Ph0en1x

1

puede ampliar el Backbone.Router y sobrecargar el route y el open método. Usted tiene todos los cambios de página manejados en esos dos métodos. Así que solo vuelva a copiarlos desde el archivo principal y juegue con él.

0

Obviamente, incluso GitHub no sabe cómo detectar qué botón se ha pulsado) Utilizan este código:

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

Puede enlazar una devolución de llamada a Backbone route evento:

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

Usted puede usar Backbone.history.getFragment() para saber dónde estaba parado.

+0

Falta un paréntesis de cierre) al final de su fragmento – fadomire

3

Cuando se presiona el botón Atrás se activa un evento popstate.

estoy usando esta pieza de código:

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