2011-06-20 74 views
25

示例代碼:過濾骨幹集合返回模型的數組

this.books = this.getBooksFromDatabase(); 
this.publishedBooks = this.books.filter(function(book) { 
    return book.get("isPublished") === "1"; 
}); 

這裏躺着的問題:

this.books.filter,返回模型的數組。我已經試過包裝的陣列,因爲這樣的:

var publishedBooks = _(this.books.filter(function(book) { 
    return book.get("isPublished") === "1"; 
})) 

所推薦的這篇文章: https://github.com/documentcloud/backbone/issues/120

,但我仍然不能運行的東西,如: publishedBooks.each(...)或 publishedBooks.get(...)

我在想什麼?有沒有辦法將返回的數組轉換爲集合?

回答

34

您可以實例化一個新的主幹集合並傳入數組。

var myPublishedBooks = new MyBooksCollection(publishedBooks); 

或者你可以刷新你的原始收藏。

this.books.refresh(publishedBooks) 

注意0.5.0 release in July 2011改名refreshreset,這樣你就可以在骨幹網的新版本實現這一點;

this.books.reset(publishedBooks) 
+12

Collection#refresh已重命名爲Collection#reset http://documentcloud.github.com/backbone/#Collection-reset –

4
var collection = new Backbone.collection(yourArray) 
+0

這隻適用於「香草」Backbone Collection。即使使用自定義集合,也需要對其定義進行硬編碼。上面的解決方案很好地避免了這一點。 –

3

我經常做這樣的事情:

var collection = new MySpecialCollection([...]); 
//And later... 
var subset = new collection.constructor(collection.filter(...)); 

這將創建同一類型的實例作爲你的原來的集合,用過濾的模型,這樣你就可以收集繼續方法(每個過濾器,查找,採摘等)。