2013-03-25 14 views
5

Ich versuche, Daten aus DashboardIndexController in DashboardIndexViewAccess-Daten von der Steuerung im Hinblick auf didInsertElement

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

zugreifen Ist es möglich, Benutzer in JP.DashboardIndexView in didInsertElement zugreifen?

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

Das ist mein DashboardIndexRoute:

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

Danke

EDIT

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

Returns Daten nur, wenn ich zu UsersIndex gehen und dann zu DashboardIndex zurück .. Ich denke, es ist etwas mit Initialisierung, aber ich weiß nicht, wie man es beheben kann.

Antwort

9

Ja, so können Sie auf die Benutzerliste zugreifen.

Dies passiert, weil die DashboardIndexView in das DOM eingefügt wird, bevor die controller.users mit Daten vom Server aufgefüllt wird.

Wenn die Ansicht gerendert wird, controller.users immer noch leer ist und asynchron nach dem Beenden der Ajax-Anforderung ausgefüllt wird, ist das Problem, didInsertElement bereits ausgelöst.

Um dies zu lösen, müssen Sie von einem anderen Hook auf controller.users zugreifen. DidInsertElement ist der falsche Ort, denn es wird unabhängig davon ausgelöst, ob JP.User.find() fertig geladen wird.

Sie müssen nur sicherstellen, dass es erneut ausgelöst wird, wenn JP.User.find() geladen wird, selbst wenn die Ansicht bereits im DOM ist. Etwas wie folgt aus:..

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

Ich habe Probleme bekommen eine berechnete Eigenschaft innerhalb 'usersChanged' ...' this.get ('Controller') erhalten ('Modell') erhalten ('Länge') ' zeigt mir, dass meine Modelle geladen sind, aber 'this.get ('controller'). get ('total')' (eine berechnete Eigenschaft) gibt NaN zurück. Irgendwelche Ideen? –

+0

auch, das wird jedes Mal ausgelöst, wenn ein Benutzer geladen wird. Gibt es einen Auslöser für das Laden aller Benutzer? Vielen Dank! –

+1

Ich habe nicht genug Informationen, um deine erste Frage zu beantworten. Für die zweite Frage können Sie versuchen, die Methode mit 'Ember.run.once' zu ​​planen; siehe https://gist.github.com/teddyzeenny/6029603 –

Verwandte Themen