我有一个与某个模型有关的20个id的数组。
[4,16,43,34....]
我想创建一个包含由这些ID值表示的模型的集合。我被建议使用map来做到这一点:
arr = arr.map(function(id) { return getModel(id); });
但是当整个过程完成时,没有任何方法可以获得成功函数或回调。在此完成之前,我无法执行下一个任务。
关于我如何做到这一点的任何提示?感谢
答案 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);
});