0

谁能告诉我为什么在我的 Ember 路线中我的 usersArr 不可用?请参阅下面的警报。

App.UsersIndexRoute = Ember.Route.extend({
setupController: function (controller, model) {

    var usersArr = App.userService.findUsers(); // there are 10 items in this
    var arrControl = Ember.ArrayController.create({
        content: usersArr,
        sortProperties: ['id'],
        sortAscending: true
    });

    // begin:  my test code
    alert('usersArr.length: ' + usersArr.length); // displays "0"
    // end:  my test code

    controller.set('currentPage', {label: 1, startItem: 0});
    controller.set('content', arrControl);
}

});

控制器和页面显示 usersArr 数据就好了。但是,我根本无法弄清楚如何在 Route.setupController() 方法中访问它。我想将它切片为子模板。有任何想法吗?

4

1 回答 1

1

您将长度视为 0 的原因是,当您执行时find() Ember立即响应长度为 0(承诺)的对象,但在后台Ember查询数据库并且一旦请求成功,该对象就会被记录填充。

它是异步发生的,即 javascript 开始执行您方法中的其余行,而不是等待数据加载,但是 ember 为我们提供了 isLoaded标志以知道记录何时完成加载,以便我们可以将其与observer待办事项结合起来记录完成加载后的东西。

在你的情况下,我会做

App.UsersIndexRoute = Ember.Route.extend({
  setupController: function (controller, model) {

      this.set('usersArr', App.userService.findUsers()); // there are 10 items in this
      /* your code */
  },
  notify: function(){
    alert(this.get('usersArr.length'));
  }.observes("usersArr.isLoaded")
});

它在模板中正常工作的原因是,默认的把手助手是绑定感知的,Ember负责为我们更新......

于 2013-05-20T13:28:15.637 回答