2012-07-23 12 views
12

Estoy intentando descubrir cómo evitar o pausar un cambio de ruta. Para mis pantallas de edición, si el usuario navega fuera (botón de retroceso o algún otro mecanismo) cuando tienen cambios no guardados, me gustaría pedirles que se aseguren de que quieran abandonar la página. Muy similar a window.onbeforeunload, pero a través del enrutador.Enrutamiento de Ember.js: evitar de forma condicional el cambio de ruta/estado

El diagrama de estado en versiones anteriores de Ember le dio un objeto de transición que podría usar. Parece que en las últimas noticias, este ya no es el caso. Entonces, ¿cuál es la mejor manera de hacerlo?


EDIT:

La pregunta anterior es antiguo y las respuestas anteriores son anticuadas. Ember ahora tiene una forma nativa de manejar esto. Ver documentos: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/

Respuesta

2

No estoy seguro de que sea posible ya que hay (tal vez me perdí algo) ningún controlador disponible antes de salir de un estado. Si mira triggering enter state y enterState() code, parece que no puede interrumpir o cancelar la transición entre dos estados.

Creo que esto es explicado por Tom Dale en Allow canceling state transitions.

En su caso, tal vez podría declarar a un estado intermedio responsable redirigir al estado anterior si el usuario cancela, o pasar al nuevo estado si el usuario lo acepta. Tengo que decir que es más fácil de escribir que para poner en práctica :(

+0

estoy de acuerdo con la respuesta de Tom Dale en GitHub esto debe ser marcado como la respuesta aceptada – dmzza

8

Lo que se quiere hacer es hacer sus transiciones condicionales En lugar de utilizar Ember.Route.transitionTo directamente, usted quiere algo como:.

var transitionAfterConfirmation = function(target){ 
    var defaultEvent = Ember.Route.transitionTo(target), 
     event = function(stateManager, context){ 
      if(confirm("Really go?")){ 
       defaultEvent(stateManager,context); 
      } 
     }; 

    event.transitionTarget = target; 

    return event; 
}; 

ver http://jsfiddle.net/hjdivad/KsHCN/ para una . ejemplo

+0

¡Muy bien! Guardo el enlace a tu violín ... :-) –

Cuestiones relacionadas