2013-11-26 10 views
5

Sto lavorando su un'applicazione mobile ember.js (versione 1.2) e sto cercando di trovare il modo più idiomatico di implementare il modello di pulsante/pulsante di menu globale che è comune in molte app mobili. In particolare, è un pulsante che si trova sul lato sinistro di una barra degli strumenti fissa, che abilita/disabilita un menu principale del cassetto nascosto quando l'utente si trova nella vista home/index dell'app, tuttavia quando si sposta in una sotto-via, il pulsante visualizza una parte posteriore freccia, e quando viene cliccato, riporta l'utente alla rotta visualizzata in precedenza (o torna alla rotta dell'indice se non ci sono stati precedenti della cronologia, cioè se l'utente è entrato in una sottotrada direttamente dopo aver caricato l'app).Implementazione di un pulsante "condizionale" in ember.js

Fyi, attualmente ho la mia app strutturata con la barra degli strumenti fissa e il pulsante di attivazione/disattivazione del menu nel modello di applicazione radice. L'ideale sarebbe che questa funzionalità funzionasse indipendentemente dal modo in cui i percorsi sono stati trasferiti, sia tramite gli aiuti transitionTo(), sia con gli strumenti {{#link-to}}, ecc.

Quindi in sostanza voglio sapere se Ember mantiene internamente qualsiasi tipo di cronologia accessibile/registro di quali percorsi sono stati trasferiti nel corso della vita dell'app, e anche quale sarebbe il modo migliore per modificare condizionalmente l'azione che il il pulsante di attivazione/disattivazione e il suo display (ovvero la sua icona) a seconda del percorso corrente. E/o c'è un modo per ascoltare gli eventi di modifica del percorso di Ember in modo da poter implementare quella storia io stesso se necessario?

risposta

11

Odio essere il portatore di cattive notizie, ma odio anche lasciarti impiccato.

Ember non tiene traccia della cronologia, non esiste un caso di utilizzo generale (soprattutto perché il browser tiene traccia di esso per voi).

Fortunatamente è possibile monitorare i cambiamenti di rotta nel controller dell'applicazione, qualcosa di simile dovrebbe iniziare (Nota che non ho trascorso del tempo a lavorare su una soluzione fantastica che funziona perfettamente, ho solo mostrato le basi di cui hai bisogno, 'll consentono di capire il flusso di lavoro che funziona bene per voi)

http://emberjs.jsbin.com/IZAZemEP/1/edit

App.ApplicationController = Em.Controller.extend({ 
    history: [], 

    hasHistory: function(){ 
    return this.get('history.length')>1; 
    }.property('history.length'), 

    watchHistory: function(){ 
    this.get('history').pushObject(this.get('currentPath')); 
    }.observes('currentPath'), 

    actions: { 
    goBack: function(){ 
     // implement your own history popping that actually works ;) 
     if(this.get('hasHistory')){ 
     this.get('history').popObject(); 
     window.history.back(); 
     this.get('history').popObject(); // get rid of route change here, don't need it 
     } 
    } 
    } 
}); 
+0

Sì, ero abbastanza sicuro che brace non ha avuto niente di simile built-in quanto non riuscivo a trovare alcuna menzionarlo ovunque nelle guide o nei documenti API, ma volevo solo assicurarmi che prima avessi implementato qualcosa per questo yself. Il tuo esempio dovrebbe essere un punto di partenza perfetto per questo, grazie mille! –

+4

Nell'azione goBack aggiungerei (!! this.get ('hasHistory')) {} else {// transitionTo index} per evitare di cacciare qualcuno dall'app – ndreckshage

Problemi correlati