从id值数组创建骨干集合

时间:2013-01-05 21:25:23

标签: javascript model-view-controller backbone.js collections model

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我曾经为Backbone集合制作了这个fetchMany mixin,它完全正如你所做的那样,加上jQuery promise API的一些糖。也许它对你有用吗?

mixin:

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);
});