2011-06-20 14 views
25

サンプルコードの配列を返します、バックボーンコレクションをフィルタリングするモデル

this.books.filterモデルの配列を返します。

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

ここで問題があります。この記事で推奨されているように

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は、resetrefreshに改名注意。あなたは、コレクションを続けることができますので、これはあなたの元のコレクションと同じ型のインスタンスを作成します

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

、フィルタのモデルと:

this.books.reset(publishedBooks) 
+12

コレクション番号は、コレクション番号にリセットされました。リセットhttp://documentcloud.github.com/backbone/#Collection-reset –

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

これは、「バニラ」バックボーンコレクションでのみ機能します。カスタムコレクションでも、その定義をハードコードする必要があります。上記のリセットによる解決策は、それをうまく回避します。 –

3

は、私は頻繁にこのような何かをメソッド(それぞれ、フィルター、検索、抜粋など)

関連する問題