Javascript 从id值数组创建主干集合
我有一个20个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
[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工作完成后,谢谢你的提示