2013-03-25 7 views
5

sto cercando di accedere ai dati da DashboardIndexController in DashboardIndexViewAccesso ai dati da controllore a vista in didInsertElement

JP.DashboardIndexController = Ember.Controller.extend({ 
    users: [] 
}); 

è possibile accedere gli utenti in JP.DashboardIndexView in didInsertElement?

didInsertElement : function(){ 
    console.log(this.get("controller.users").objectAt(0)); 
} 

Questo è il mio DashboardIndexRoute:

JP.DashboardIndexRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
    controller.set('users', JP.User.find()); 
    } 
}); 

Grazie

EDIT solo

console.log(this.get("controller.users").objectAt(0)); 

Restituisce i dati quando vado a UsersIndex e poi di nuovo a DashboardIndex .. Penso che sia qualcosa con l'inizializzazione, ma non so, come risolverlo.

risposta

9

Sì, questo è come accedere all'elenco di utenti.

Questo succede perché il DashboardIndexView viene inserito nel DOM prima che lo controller.users venga popolato con i dati dal server.

Così, quando la vista è reso, controller.users è ancora vuoto, e sarà in modo asincrono essere popolato dopo la richiesta ajax finisce, problema è, didInsertElement già sparato.

Per risolvere questo problema, è necessario accedere a controller.users da un altro gancio. DidInsertElement è il posto sbagliato, perché sparerà a prescindere dal fatto che sia stato completato il caricamento di JP.User.find().

Devi solo assicurarti che si riaccenda quando JP.User.find() viene caricato anche se la vista è già nel DOM. Qualcosa di simile a questo:..

JP.DashboardIndexView = Ember.View.extend({ 
    didInsertElement: function() { 
    this.usersChanged(); 
    }, 
    usersChanged: function() { 
    if (!this.$()) { return; } // View not in DOM 
    console.log(this.get('controller.users')); 
    }.observes('[email protected]') 
}); 
+0

Sto avendo difficoltà a raggiungere una proprietà calcolata all'interno di '' usersChanged' ... this.get ('controllore') get ('modello') get ('lunghezza') ' mi mostra che i miei modelli sono caricati, ma 'this.get ('controller'). get ('total')' (una proprietà calcolata) restituisce NaN. Qualche idea? –

+0

inoltre, questo viene attivato ogni volta che viene caricato un utente. c'è un trigger per quando tutti gli utenti sono caricati? Grazie! –

+1

Non ho abbastanza informazioni per rispondere alla tua prima domanda. Per la seconda domanda, puoi provare a pianificare il metodo usando 'Ember.run.once'; vedi https://gist.github.com/teddyzeenny/6029603 –