當我使用Backbone.Collection.where
函數來過濾集合時,我得到一個模型數組作爲返回值,但沒有其他過濾的集合對象。所以我不能使用其他收集功能。爲什麼backbone.js函數返回一個模型數組?
這種行爲的目的是什麼?
當我使用Backbone.Collection.where
函數來過濾集合時,我得到一個模型數組作爲返回值,但沒有其他過濾的集合對象。所以我不能使用其他收集功能。爲什麼backbone.js函數返回一個模型數組?
這種行爲的目的是什麼?
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。
請注意,您仍然可以使用陣列上的大部分下劃線實用程序。以下是如何過濾器()
_.each後使用每個()(MyCollection.filter(filter_fn(){}),each_fn(){})
我添加了一些額外的背景下作出的集合按照你可能想要的方式行事。 – Trevor