サンプルコード:
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/12
しかし、私はまだ次のようなものを実行することはできません:publishedBooks.each(...)、またはpublishedBooks.get(...)
何が足りないのですか?返された配列をコレクションに変換する方法はありますか?
新しいバックボーンコレクションをインスタンス化して、配列に渡すことができます。
var myPublishedBooks = new MyBooksCollection(publishedBooks);
または、元のコレクションを更新することもできます。
this.books.refresh(publishedBooks)
注2011年7月の0.5.0リリースrefresh
の名前をreset
に変更しました。したがって、新しいバージョンのBackboneでこれを実現できます。
this.books.reset(publishedBooks)
var collection = new Backbone.collection(yourArray)
私はよくこのようなことをします:
var collection = new MySpecialCollection([...]);
//And later...
var subset = new collection.constructor(collection.filter(...));
これにより、フィルタリングされたモデルを使用して、元のコレクションと同じタイプのインスタンスが作成されるため、コレクションメソッド(each、filter、find、pluckなど)を続行できます。