2012-06-25 17 views
8

Sto cercando di capire se gli stati in Ember.js sono progettati/presupposti per essere definiti in un gestore di percorsi e se i percorsi sono integrati in Ember. Praticamente tutti i guides che ho visto sembrano presupporre che vuoi stati e percorsi esattamente corrispondenti.Stati in Ember.js senza utilizzare le rotte?

Desidero creare stati che non dipendano da percorsi, ma solo dallo stato dell'applicazione. Ad esempio, in un client di posta elettronica, potrei avere uno stato "userHasSpecifiedRecipient". Solo se questo stato è vero, potrei abilitare la finestra di messaggio del modulo. Ma, ovviamente, non voglio l'URL da:

myEmailClient.com#composingMessage_userHasSpecifiedRecipient_userIs... ecc

ci sono esempi di questo?

Seconda domanda: posso combinare stati accoppiati con percorsi e stati che non lo sono?

Infine: ho visto alcuni consigli che consigliano alle persone di usare l'addon di Ember sproutcore-statechart se vogliono cose come stati concorrenti. È ancora vero?

risposta

4

In EmberJS, v'è un'implementazione di un Finite State Machine, Ember.StateManager. StateManager utilizza Ember.State per rappresentare gli stati nella macchina a stati, che hanno le funzioni enter e exit, ecc. Dai un'occhiata a Class: Ember.StateManager.

Per un esempio che utilizza lo StateManager, Ember.View lo utilizza per gestire i diversi stati di una vista. Un altro esempio è Ember-Data, che usa un gestore di stato per tracciare i diversi stati che un record può avere.

Per semplificare la vita ed evitare il codice di codice, è disponibile un'implementazione Router nell'ultima versione di EmberJS, che è ancora molto work-in-progress, con aggiornamenti una o due volte a settimana. È possibile trovare le ultime sul GitHub downloads.

Ember.Router è la sottoclasse di Ember.StateManager responsabile per il rilevamento dello stato dell'applicazione basato su URL. L'istanza Ember.Router di un'applicazione rileva l'URL del browser al momento del caricamento dell'applicazione e tenta di abbinarlo a uno specifico stato dell'applicazione. Inoltre, il router aggiornerà l'URL per riflettere le modifiche allo stato di un'applicazione nel tempo. (JSDoc in Ember source)

Inoltre, poiché il Ember.Router estende Ember.StateManager e Ember.Route estende Ember.State, questi sono intercambiabili. In effetti, solo un giorno fa è stato fatto più supporto per supportare la combinazione di stati e percorsi, vedere Support basic States inside of Routes.

2

È possibile modificare l'implementazione della posizione dei router su "nessuno" per disabilitare queste funzioni. altri metodi sono "hash" o "history" (con l'attuale ember-latest.js su github).

https://github.com/joliss/ember.js/blob/50aff86ef5b6847108bc8c32364171815c230d36/packages/ember-application/lib/system/location.js

App.Router = Ember.Router.extend({ 
    location : Ember.Location.create({ 
     implementation : 'none' 
    }) 
}); 
+1

Inoltre ho appena trovato un esempio abbastanza recente [esempio di Yehuda] (https://gist.github.com/2679013) che utilizza Ember.StateManager anziché Ember.Router. Quest'ultimo è ciò che la documentazione utilizza. Qual è la differenza tra loro? –

+0

Inoltre, per quanto riguarda la mia seconda domanda sopra, cosa succede se voglio avere qualche sottoinsieme di stati che sono accoppiati a percorsi? In tal caso, non vorrei che la posizione sia disabilitata completamente. (Se questo mix è difficile, però, non è così importante e posso implementare percorsi in qualche altro modo.) –

+0

Oh, o dovrei forse avere due StateManager diversi, uno con posizioni e uno senza? –

Problemi correlati