路线中没有Ember内容

时间:2013-05-20 13:10:17

标签: controller ember.js routes

有谁能告诉我为什么我的Ember Route中没有我的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()方法中访问它。我想将其切片为子模板。有什么想法吗?

1 个答案:

答案 0 :(得分: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负责为我们更新...