当我使用Backbone.Collection.where
函数来过滤集合时,我得到一个模型数组作为返回值,但不是其他过滤集合对象。所以我不能使用其他的收集功能。
这种行为的目的是什么?
答案 0 :(得分:6)
where
不是返回Array
的唯一方法。 where
会返回一个新的Array
,因为您绝对不希望它自动改变现有的Collection
。此外,很多时候您可能希望以Array
形式获得结果。
无论出于何种原因,BB开发者决定最好返回新的Array
而不是新的Collection
。一种想法可能是,返回的数据可能会用在不同类型的Collection
中。另一个原因可能是您始终知道从这些方法之一返回的内容。 2种类型的集合将始终从这些类型的方法返回Arrays
,而不必通过instanceof
或其他不太可靠的东西进行检查。
修改强>
此外,您可以使您的收藏集以您返回新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。
答案 1 :(得分:0)
请注意,您仍然可以在阵列上使用大多数下划线实用程序。以下是在filter()
之后使用each()的方法_。each(MyCollection.filter(filter_fn(){}),each_fn(){})