5

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

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

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

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

这是我的仪表板索引路由:

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......我认为这是初始化的问题,但我不知道如何解决它。

4

1 回答 1

9

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

发生这种情况是因为在使用来自服务器的数据填充DashboardIndexView之前将 插入到 DOM 中。controller.users

因此,当视图呈现时,controller.users仍然是空的,并且在 ajax 请求完成后将异步填充,问题是,didInsertElement已经触发了。

为了解决这个问题,您需要controller.users从另一个钩子访问。 DidInsertElement是错误的地方,因为无论是否JP.User.find()加载完成都会着火。

JP.User.find()即使视图已经在 DOM 中,您只需要确保它在加载时重新触发。像这样的东西:

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')
});
于 2013-03-25T12:04:35.237 回答