2013-03-25 62 views
5

我試圖從DashboardIndexController訪問DashboardIndexView訪問數據

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

數據是否有可能訪問用戶JP.DashboardIndexView在didInsertElement?

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

這是我DashboardIndexRoute:

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

謝謝

僅編輯

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

返回數據時,我去UsersIndex然後回DashboardIndex ..我認爲這是一個問題與初始化,但我不知道,如何解決它。

回答

9

是的,這是如何訪問用戶列表。

發生這種情況是因爲DashboardIndexView插入到DOM中,然後controller.users被填充來自服務器的數據。

所以當渲染視圖時,controller.users仍然是空的,並且會在ajax請求完成後異步填充,問題是,已經觸發問題didInsertElement

爲了解決這個問題,您需要從另一個鉤子訪問controller.usersDidInsertElement是錯誤的地方,因爲無論JP.User.find()是否完成加載,它都會觸發。

即使視圖已經存在於DOM中,您只需確保在加載JP.User.find()時重新觸發。這樣的事情:

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

我無法在'usersChanged'內獲取計算屬性...'this.get('controller')。get('model')。get('length')'顯示我的模型已加載,但'this.get('controller')。get('total')'(計算屬性)返回NaN。有任何想法嗎? – 2013-07-18 13:44:33

+0

也是,每次加載用戶時都會觸發。是否有所有用戶加載時的觸發器?謝謝! – 2013-07-18 13:46:02

+1

我沒有足夠的信息來回答你的第一個問題。對於第二個問題,您可以嘗試使用'Ember.run.once'來安排方法;見https://gist.github.com/teddyzeenny/6029603 – 2013-07-18 14:08:23