5

DS.RecordArray の isLoaded が true に変更される状況がありますが、RecordArray の内容、長さプロパティはまだ空で、その時点では 0 であり、後でのみ変更されます。

サンプルコード(コーヒースクリプト):

@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 ですが、2 番目は 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 が完全に取り込まれたことを知る正しい方法は何ですか??

4

2 に答える 2

2

Ember.js が promise を使用するときから、これを行うことができます

App.FollowRequests.find().then(function () {
    // This callback will fire when array is loaded
});
于 2013-04-20T11:41:52.397 に答える
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()
});
于 2013-11-23T11:10:48.380 に答える