È buona norma impostare la variabile globale Utente corrente nell'oggetto App?
No, questa non è una buona pratica. Dovresti evitare di usare variabili globali. Il framework fa molto per renderlo possibile - se ti accorgi che pensare a una variabile globale è la soluzione migliore, è un segno che qualcosa dovrebbe essere rifattorizzato. Nella maggior parte dei casi il posto giusto è in un controller. Ad esempio, potrebbe essere currentUser:
//a property of application controller
App.ApplicationController = Ember.Controller.extend({
currentUser: null
});
//or it's own controller
App.CurrentUserController = Ember.ObjectController.extend({});
Come aggiornare e accedere alla proprietà currentUser da tutti i controllori utilizzati in app?
Utilizzare la proprietà needs
. Supponiamo che tu abbia dichiarato currentUser come proprietà di ApplicationController. Vi si può accedere da PostsController come questo:
App.PostsController = Ember.ArrayController.extend{(
needs: ['application'],
currentUser: Ember.computed.alias('controllers.application.currentUser'),
addPost: function() {
console.log('Adding a post for ', this.get('currentUser.name'));
}
)}
Se avete bisogno di accedere currentUser da una vista/template, basta usare needs
per renderlo accessibile tramite il controllore locale. E se ne hai bisogno da una rotta, usa il metodo di controllo del percorso.
fonte
2013-06-02 02:50:08
Ho poche proprietà booleane a livello di applicazione e tali proprietà verranno utilizzate in quasi tutte le viste/modelli. Se li definisco in 'applicationController', devo definire la proprietà' needs' in tutto il controller. Se li definisco in App, non c'è bisogno di "bisogni". Qualche idea su questo? – Manoharan
Riesco a vedere un argomento per l'impostazione di alcune proprietà booleane a livello di app, come la stessa ember definisce LOG_TRANSITIONS. Qualcosa di più complicato dovrebbe essere nel proprio controller. Se ti trovi in una situazione in cui desideri che un controller sia disponibile in tutti gli altri, puoi utilizzare un inizializzatore per iniettarlo negli altri. Vedi http://mcdowall.info/posts/ember-application-initializers/ per un esempio che rende 'CurrentUserController' disponibile come proprietà' currentUser' di tutti i controller. Potrebbe facilmente fare lo stesso con un ConfigController. –
Ember.Computed dovrebbe essere Ember.computed – Nath