当我使用该Backbone.Collection.where
函数过滤集合时,我得到一个模型数组作为返回值,而不是其他过滤的集合对象。所以我不能使用其他收集功能。
这种行为的目的是什么?
当我使用该Backbone.Collection.where
函数过滤集合时,我得到一个模型数组作为返回值,而不是其他过滤的集合对象。所以我不能使用其他收集功能。
这种行为的目的是什么?
where
不是唯一返回Array
. where
返回一个新的Array
,因为你绝对不希望它Collection
自动改变你现有的。此外,很多时候您可能想要Array
形式的结果。
无论出于何种原因,BB 开发人员决定返回一个新的Array
而不是一个新的更好Collection
。一个想法可能是,返回的数据可能会用于不同类型的Collection
. 另一个原因可能是您始终知道其中一种方法返回的内容。2+ 类型的集合将始终Arrays
从这些类型的方法返回,而不必尝试检查 viainstanceof
或其他不太可靠的方法。
编辑
此外,您可以使您的集合以您返回 new 的方式运行Collections
。创建一个基本集合来执行以下操作:
// Override the following methods
var override = ["where","find",...];
var collectionProto = Backbone.Collection.prototype;
BaseCollection = Backbone.Collection.extend({});
for (var key in collectionProto) {
if (collectionProto.hasOwnProperty(key) && override.indexOf(key) > -1) {
BaseCollection.prototype[key] = function () {
return new this.constructor(collectionProto[key].apply(this, arguments);
};
}
}
而是过度扩展 Backbone.Collection,扩展 BaseCollection。
请注意,您仍然可以在数组上使用大多数下划线实用程序。这是在 filter() 之后使用 each() 的方法
_.each(MyCollection.filter(filter_fn() {}), each_fn() {})