为什么backbone.js where函数返回一组模型?
当我使用为什么backbone.js where函数返回一组模型?,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,当我使用Backbone.Collection.where函数过滤集合时,我得到一个模型数组作为返回值,而不是其他过滤的集合对象。所以我不能用其他的收集函数 这种行为的目的是什么?其中不是唯一返回数组的方法其中返回一个新的数组,因为您肯定不希望它自动改变现有的集合。此外,很多时候,您可能希望以数组形式显示结果 无论出于何种原因,BB开发者决定最好返回一个新的数组,而不是一个新的集合。一种想法可能是,返回的数据可能会用于不同类型的集合。另一个原因可能是,您总是知道从其中一个方法返回什么。2+类型的
Backbone.Collection.where
函数过滤集合时,我得到一个模型数组作为返回值,而不是其他过滤的集合对象。所以我不能用其他的收集函数
这种行为的目的是什么?
其中
不是唯一返回数组的方法其中
返回一个新的数组
,因为您肯定不希望它自动改变现有的集合
。此外,很多时候,您可能希望以数组形式显示结果
无论出于何种原因,BB开发者决定最好返回一个新的数组
,而不是一个新的集合
。一种想法可能是,返回的数据可能会用于不同类型的集合
。另一个原因可能是,您总是知道从其中一个方法返回什么。2+类型的集合将始终从这些类型的方法返回数组
,而不必尝试通过instanceof
或其他不太可靠的方法进行检查
编辑
此外,您可以使集合以返回新的集合的方式运行。创建基本集合以执行以下操作:
// 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);
};
}
}
请注意,您仍然可以在阵列上使用大多数下划线实用程序。下面介绍如何在筛选器()之后使用each()
_.each(MyCollection.filter(filter_fn(){})、each_fn(){})我添加了一些额外的上下文,以使集合的行为也符合您的要求。