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