0

特定のモデルに関連する 20 個の ID の配列があります。

[4,16,43,34....]

これらの ID 値で表されるモデルを含むコレクションを作成したいと考えています。map を使用してそれを行うことが提案されました:

arr = arr.map(function(id) { return getModel(id); });

しかし、プロセス全体が完了したときに成功関数またはコールバックを行う方法はありません。これが完了するまで、次のタスクを実行できません。

これを行う方法に関するヒントはありますか?ありがとう

4

1 に答える 1

1

私はかつてfetchManyバックボーン コレクション用にこの mixin を作成しました。これは、あなたが求めているものとほとんど同じであり、さらに jQuery promise API に関するいくつかの砂糖です。多分それはあなたにとっても役に立つでしょうか?

ミックスイン:

Backbone.Collection.prototype.fetchMany = function(ids, options) {
  var collection = this;
  var promises = _.map(ids, function(id) {
    var instance = collection.get(id);
    if(!instance) {
      instance = new collection.model({id:id});
      collection.add(instance);
    }
    return instance.fetch(options);
  });
  //promise that all fetches will complete, give the collection as parameter
  return $.when.apply(this, promises).pipe(function() { return collection; });
};

次のように使用できます。

var collection = new SomeCollection();
collection.fetchMany([4,16,43,34]).then(function(c) {
  //do something with the collection...
  $("body").append(new SomeView({collection:c}).render().el);
});
于 2013-01-06T13:27:14.740 に答える