为什么backbone.js函数返回模型数组?

fey*_*fey 3 backbone.js backbone.js-collections

当我使用该Backbone.Collection.where函数来过滤集合时,我得到一个模型数组作为返回值,但不是另一个过滤的集合对象.所以我不能使用其他收集功能.

这种行为的目的是什么?

Tre*_*vor 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);
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是扩展Backbone.Collection,扩展BaseCollection.