在didInsertElement中从视图中访问控制器中的数据

时间:2013-03-25 10:21:28

标签: ember.js

我正在尝试从DashboardIndexView中的DashboardIndexController访问数据

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

是否可以在didInsertElement中的JP.DashboardIndexView中访问用户?

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时才返回数据...我认为这是初始化的内容,但我不知道,如何修复它。

1 个答案:

答案 0 :(得分:9)

是的,这是访问用户列表的方法。

这是因为在DashboardIndexView填充了来自服务器的数据之前,controller.users被插入到DOM中。

因此,当呈现视图时,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('controller.users.@each')
});