我有一种情况,DS.RecordArray上的isLoaded变为true,但RecordArray的content,length属性仍然为空,当时为0,之后只会更改。
示例代码(coffeescript):
@set('followRequests', App.FollowRequests.find())
...
whenDataLoads: (->
console.log @get('followRequests.isLoaded')
console.log @get('followRequests.length')
@set('content', @get('followRequests').toArray() )
).observes('followRequests.isLoaded')
第一个日志语句为true,第二个为0,使用此数据的模板为空。当我看到实际的AJAX请求时,我看到请求确实返回了一组记录。 RecordArray的长度和内容确实会稍后改变,如浏览器控制台中所示:
App.Router.myController.get('followRequests').get('length')
---> 12
但是,此代码(如下所示)确实填充了模板中的内容,但它运行了12次......
whenDataLoads: (->
console.log @get('followRequests.isLoaded')
console.log @get('followRequests.length')
@set('content', @get('followRequests').toArray() )
).observes('followRequests.length')
什么是正确的方法来了解RecordArray何时完全填充...... ??
答案 0 :(得分:2)
由于Ember.js使用承诺,你可以这样做
App.FollowRequests.find().then(function () {
// This callback will fire when array is loaded
});
答案 1 :(得分:0)
在Ember Data beta 1.0.0中,您将使用路由或控制器中提供的store
属性请求记录。
// fetch one
var promiseArray = this.store.find('follow_request', follow_request_id);
// fetch all
var promiseArray = this.store.find('follow_request');
// set callbacks on promise array
promiseArray.then(onFollowRequestSuccess, onFollowRequestFailure);
// or set callbacks on promise object
var promise = promiseArray.get('promise');
promise.then(onFollowRequestSuccess, onFollowRequestFailure);
// or use computed property
App.FollowRequestsController = Ember.ArrayController.extend({
loadedCount: function() {
return this.get('content.@each').filterBy('isLoaded', true).length;
}.property('content.@each.isLoaded').cacheable()
});