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

时间:2012-12-25 13:16:07

标签: backbone.js backbone-collections

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

这种行为的目的是什么?

2 个答案:

答案 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(){})