Javascript 从id值数组创建主干集合

Javascript 从id值数组创建主干集合,javascript,model-view-controller,backbone.js,collections,model,Javascript,Model View Controller,Backbone.js,Collections,Model,我有一个20个id的数组,属于某个模型 [4,16,43,34....] 我想创建一个集合,其中包含由这些ID值表示的模型。有人建议我用map来做: arr = arr.map(function(id) { return getModel(id); }); 但在整个过程完成后,没有任何方法可以实现成功的函数或回调。在完成之前,我无法执行下一个任务 关于我如何做到这一点有什么建议吗?谢谢我曾经为主干集合制作了这个fetchManymixin,它几乎完全符合您的需求,并在jQuery promi

我有一个20个id的数组,属于某个模型

[4,16,43,34....]
我想创建一个集合,其中包含由这些ID值表示的模型。有人建议我用map来做:

arr = arr.map(function(id) { return getModel(id); });
但在整个过程完成后,没有任何方法可以实现成功的函数或回调。在完成之前,我无法执行下一个任务


关于我如何做到这一点有什么建议吗?谢谢

我曾经为主干集合制作了这个
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);
});

map
是同步的,那么有什么问题?
getModel
在幕后执行
fetch
吗?如果
getModel
执行
fetch
方法,您可以在所有模型都被获取后使用该方法执行回调,是的,getModel是一个获取,这只是一个想法。我来看看after@VitaliyPetrychuk工作完成后,谢谢你的提示