0

我有一个与某个模型有关的 20 个 id 数组。

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

我想创建一个包含由这些 ID 值表示的模型的集合。我被建议使用地图来做到这一点:

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

但是当整个过程完成后,就没有任何方法可以获得成功函数或回调。在完成之前,我无法执行下一个任务。

关于我如何做到这一点的任何提示?谢谢

4

1 回答 1

1

我曾经fetchMany为 Backbone 集合制作了这个 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 回答