有谁能告诉我为什么我的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()方法中访问它。我想将其切片为子模板。有什么想法吗?
答案 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
负责为我们更新...