2012-12-25 110 views

回答

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。

+0

我添加了一些額外的背景下作出的集合按照你可能想要的方式行事。 – Trevor

0

請注意,您仍然可以使用陣列上的大部分下劃線實用程序。以下是如何過濾器()

_.each後使用每個()(MyCollection.filter(filter_fn(){}),each_fn(){})

相關問題