2012-07-06 18 views
6

Tengo una ventana emergente modal que cuando se abre cambia la URL. Cuando un usuario cierra la ventana emergente, quiero volver a la URL anterior, pero no quiero activar la ruta asociada a esa URL porque eso recargará mi colección y representará la vista, etc. ¿Hay alguna manera de llamar al window.history.back() sin disparar la ruta, o hay una red troncal equivalente a esta?Usando Backbone.history para volver sin activar la función de ruta

La única solución que se me ocurre sería guardar la ruta anterior, a continuación, cuando la llamada modal es cerrado

Backbone.history.navigate(route, {trigger: false, replace: true}); 

pero esto parece una forma compleja de resolver un problema fácil.

+1

Mi sugerencia (y lamento que no responda a su pregunta en absoluto) es considerar qué pasaría si marcan como favorito su página mientras se muestra la ventana emergente. Si regresan directamente a http://yoursite.com/#popup/route, puede comportarse de manera extraña. Si no se comporta de forma extraña, ¿qué pasaría si cierran el cuadro de diálogo modal? En mi experiencia, no he usado los enrutadores para provocar un diálogo modal por estos motivos. Espero que esto tenga sentido. – timDunham

+0

Si marcan como favorito la página y luego regresan a yoursite.com/#popup/route, los redireccionará a una versión html estática de esa ventana emergente en yoursite.com/popup/route, por lo que no hay ninguna opción para cerrar la ventana emergente. – Barny

Respuesta

5

Almacenar el historial en un enrutador me parece una buena solución, no pude encontrar una mejor manera de resolver este problema.

Una buena solución de la que está aquí: Silently change url to previous using Backbone.js

me gustaría hacer un pequeño ajuste por lo que se vería así:

class MyRouter extends Backbone.Router 

    initialize: (options) -> 
    @on "all", @storeRoute 
    @history = [] 

    storeRoute: -> 
    @history.push Backbone.history.fragment 

    previous: -> 
    if @history.length > 1 
     @navigate @history[@history.length-2], false 
    else 
     @navigate '', true 

a continuación, puedes llamar MyRouter.previous(), y si viniste por solicitud directa, te llevará a tu raíz.

Desearía que fuera una función predeterminada del enrutador, al menos para que mantenga 5 últimas rutas.

Cuestiones relacionadas