2013-03-25 11 views
5

Próbuję uzyskać dostęp do danych z DashboardIndexController w DashboardIndexViewDostęp do danych ze sterownikiem w widoku w didInsertElement

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

Czy to możliwe, aby uzyskać dostęp do użytkowników w JP.DashboardIndexView w didInsertElement?

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

To mój DashboardIndexRoute:

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

Dziękuję

edytować tylko

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

zwraca dane, kiedy idę do UsersIndex a następnie z powrotem do DashboardIndex .. Myślę, że to coś przy inicjalizacji, ale nie wiem, jak to naprawić.

Odpowiedz

9

Tak, to sposób uzyskania dostępu do listy użytkowników.

Dzieje się tak, ponieważ DashboardIndexView jest wstawiany do DOM, zanim controller.users zostanie zapełniony danymi z serwera.

Kiedy widok jest renderowany, controller.users jest nadal pusty i zostanie asynchronicznie zapełniony po zakończeniu żądania ajax, problem jest, didInsertElement już uruchomiony.

Aby rozwiązać ten problem, musisz uzyskać dostęp do controller.users z innego haka. DidInsertElement jest niewłaściwym miejscem, ponieważ uruchomi się niezależnie od tego, czy zakończyło się ładowanie JP.User.find().

Wystarczy się upewnić, że zostanie ponownie uruchomiony po załadowaniu JP.User.find(), nawet jeśli widok jest już w DOM. Coś takiego:

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

Mam problem z uzyskaniem właściwości obliczeniowej w ramach 'usersChanged' ...' this.get ('kontroler'). Get ('model'). Get ('length') ' pokazuje, że moje modele są załadowane, ale 'this.get ('controller'). get ('total')' (właściwość obliczona) zwraca NaN. Jakieś pomysły? –

+0

również jest to uruchamianie za każdym razem, gdy użytkownik jest ładowany. czy istnieje wyzwalacz, gdy wszyscy użytkownicy są ładowani? dzięki! –

+1

Nie mam wystarczających informacji, aby odpowiedzieć na twoje pierwsze pytanie. W drugim pytaniu możesz spróbować zaplanować metodę za pomocą 'Ember.run.once'; zobacz https://gist.github.com/teddyzeenny/6029603 –

Powiązane problemy