Sample Code:
this.books = this.getBooksFromDatabase();
this.publishedBooks = this.books.filter(function(book) {
return book.get("isPublished") === "1";
});
Here lies the problem:
this.books.filter, returns an array of the models. I've tried wrapping the array, as such:
var publishedBooks = _( this.books.filter(function(book) {
return book.get("isPublished") === "1";
}))
as recommended by this post: https://github.com/documentcloud/backbone/issues/120
But i still can't run things like: publishedBooks.each(...), or publishedBooks.get(...)
What am I missing? Is there a way to convert the returned array into a collection?
You could either instantiate a new backbone collection and pass in the array.
Or you could refresh your original collection.
Note that the 0.5.0 release in July 2011 renamed
refresh
toreset
, so you can achieve this in newer versions of Backbone with;I often do something like this:
This will create an instance of the same type as your original collection, with the filtered models, so you can continue with the collection methods (each, filter, find, pluck, etc).