2015-03-02 15 views
9

Ho un collegamento all'utente visualizzato da varie schermate (da Elenco utenti, Gruppi utenti ecc.). Quando si fa clic sul collegamento, l'utente viene presentato per la modifica. Quando si preme il pulsante Annulla nel modulo di modifica, desidero passare alla precedente lista utenti/gruppo. Come è generalmente raggiunto in Emberjs.Emberjs tornare all'annullamento

Grazie, Murali

+0

È possibile impostare una variabile nella UserController il cui valore dipende da dove si sono provenienti da al percorso dell'utente. Nell'azione associata al pulsante Annulla, è possibile utilizzare il valore della variabile per decidere su quale percorso eseguire il passaggio. È possibile utilizzare transitionToRoute per tornare al percorso più vecchio. Ha senso ciò? –

+0

Sarà più facile spiegare se hai un JSFiddle con il codice. –

+0

Il tuo approccio ha un senso. Pensavo ci potesse essere un modo più semplice. Deve solo replicare il comportamento del pulsante back. Non ho un JSFiddle, proverò a crearne uno – Murali

risposta

18

È necessario nulla più di

history.back() 

Uno dei principali design Gli obiettivi di Ember, e in effetti la maggior parte dei framework OPA, è lavorare armoniosamente con lo stack cronologico del browser in modo che back "funzioni correttamente".

Quindi non è necessario mantenere il proprio mini-history stack, o variabili globali, o hook di transizione.

È possibile inserire un'azione back nel router dell'applicazione a cui verranno mostrate le azioni da qualsiasi punto, quindi è sufficiente pronunciarein qualsiasi modello senza ulteriori indugi.

+0

L'approccio che ho proposto mi è sembrato un po 'scadente anche per me, quindi se l'approccio @torazaburo funziona, fallo con lui. :) – Kalman

+0

@Kalman Ho visto diverse varianti sul tuo approccio, quindi sei in buona compagnia. Tuttavia, non ho mai visto un caso in cui fosse davvero necessario, nonostante le proteste dei prodotti/feature che "conoscono" l'utente "davvero" vuole tornare al luogo magico A. D'altra parte, ho ho visto più di un caso in cui le povere brache finivano per mantenere un meccanismo di cronologia roll-your-own scadente fino a quando non si sono accorti e hanno smesso. –

+0

'Back' lo fa abbastanza bene. – Caltor

1

C'è probabilmente un modo per asciugare (non ripetere se stessi) questo in su, ma un modo per farlo è quello di avere 2 azioni: willTransition che Ember voi e goBack che dà già ti definisci. Poi, c'è un lastRoute variabile "globale" che a tenere traccia di come segue:

App.OneRoute = Ember.Route.extend({ 
    actions: { 
    willTransition: function(transition){ 
     this.controllerFor('application').set('lastRoute', 'one'); 
    }, 
    goBack: function(){ 
     var appController = this.controllerFor('application'); 
     this.transitionTo(appController.get('lastRoute')); 
    } 
    } 
}); 

E il modello apparirebbe come segue:

<script type="text/x-handlebars" id='one'> 
    <h2>One</h2> 
    <div><a href='#' {{ action 'goBack' }}>Back</a></div> 
</script> 

esempio Lavorare here

2

Ecco la mia soluzione, che è molto semplice e ad alte prestazioni.

// file:app/routers/application.js 
 
import Ember from 'ember'; 
 

 
export default Ember.Route.extend({ 
 
    transitionHistory: [], 
 
    transitioningToBack: false, 
 

 
    actions: { 
 
    // Note that an action, like 'back', may be called from any child! Like back below, for example. 
 

 
    willTransition: function(transition) { 
 
     if (!this.get('transitioningToBack')) { 
 
     this.get('transitionHistory').push(window.location.pathname); 
 
     } 
 
     this.set('transitioningToBack', false); 
 
    }, 
 
    
 
    back: function() { 
 
     var last = this.get('transitionHistory').pop(); 
 
     last = last ? last : '/dash'; 
 
     this.set('transitioningToBack', true); 
 
     this.transitionTo(last); 
 
    } 
 
    } 
 
});