2013-03-25 83 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