Ember-Data:了解RecordArray何时完全填充

时间:2013-01-22 10:24:00

标签: ember.js ember-data

我有一种情况,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何时完全填充...... ??

2 个答案:

答案 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()
});