2012-07-23 5 views
12

Sto cercando di capire come prevenire o sospendere un cambio di rotta. Per le mie schermate di modifica, se l'utente si allontana (pulsante Indietro o qualche altro meccanismo) quando hanno modifiche non salvate, vorrei chiedere loro di assicurarsi che vogliano lasciare la pagina. Molto simile a window.onbeforeunload, ma tramite il router.Instradamento Ember.js - impedimento condizionale del cambio di rotta/stato

Lo statechart nelle versioni precedenti di Ember ti ha fornito un oggetto di transizione che è possibile utilizzare. Sembra che in ultima versione, questo non è più il caso. Quindi qual è il modo migliore per farlo?


EDIT:

La domanda di cui sopra è vecchio e le risposte elencate sono datate. Ember ora ha un modo nativo per gestire questo. Vedere documenti: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/

risposta

2

Non sono sicuro che sia possibile poiché c'è (forse ho perso qualcosa) nessun gestore disponibile prima di uscire da uno stato. Guardando a triggering enter state e enterState() code, sembra che non sia possibile interrompere o annullare la transizione tra due stati.

Penso che questo sia spiegato da Tom Dale in Allow canceling state transitions.

Nel tuo caso, potresti dichiarare uno stato intermedio responsabile del reindirizzamento allo stato precedente se l'utente annulla o passa al nuovo stato se l'utente accetta. Devo dire che è più facile scrivere di implementare :(

+0

sono d'accordo con la risposta di Tom Dale su GitHub questo dovrebbe essere contrassegnato come la risposta accettata – dmzza

8

Che cosa si vuole fare è rendere le vostre transizioni condizionale Invece di usare Ember.Route.transitionTo direttamente, si desidera qualcosa di simile a:.

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; 
}; 

vedono http://jsfiddle.net/hjdivad/KsHCN/ per un . esempio

+0

Davvero bello! Tengo il collegamento al tuo violino ... :-) –