要通过它的ID从集合中获取单个模型,我可以调用
var myObject = myCollection.get(id)
当我有一个我希望获得的几个模型的ID列表时,是否有更好的方法从集合中获取它们,而不是分别为每个id调用.get()?
以下代码片段可以完成这项工作,但对于该系列的大量请求似乎有些混乱。
var idList = new Array(34, 86, 167, 413);
var models = new Array();
for (var i = 0; i < idList.length; ++i) {
models.push(myCollection.get(idList[i]));
}
感谢
- 本
答案 0 :(得分:5)
实际上它根本不是很混乱,你只是打电话给4次收集。即使Backbone允许你一次“获取”多个ID,在事情的后端它仍然会做同样多的工作。
你或许可以稍微重写一下,这样看起来会更容易一些,但这更符合你的个人偏好。我可能会使用数组的替代形式和循环符号来做这样的事情。
var ids = [34, 86, 167, 413];
var selected = [];
for (var i in ids)
selected.push(myCollection.get(ids[i]));
如果你要做很多事情,并希望让它看起来更干净,你可以使用过滤器来返回像mu所提到的较小的集合。
filterBy: function(attribute, value) {
var filtered = this.filter(function(items) {
return _.contains(value, items.get(attribute));
});
return new myCollection(filtered);
}
var newFilteredCollection = myCollection.filterBy('id', [34, 86, 167, 413]);
答案 1 :(得分:2)
如果你已经Backbone
,那么你已经underscore
(或LoDash
),那么这个怎么样?
var ids = [34, 86, 167, 413];
var selected = _.map(ids, function (id) {
return myCollection.get(id);
});
或者,作为效用函数(可以添加到Backbone.Collection
原型):
/**
* @param {Number[]}ids
* @returns {Backbone.Model[]}
*/
getForIds: function (ids) {
return _.map(ids, function (id) {
// replace "myCollection" with "this" if extending Backbone.Collection:
return myCollection.get(id);
});
}