开发者

Filtering a Backbone Collection returns an array of Models

开发者 https://www.devze.com 2023-03-14 00:35 出处:网络
Sample Code: this.books = this.getBooksFromDatabase(); this.publishedBooks = this.books.filter(function(book) {

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 retur开发者_如何学编程ned array into a collection?


You could either instantiate a new backbone collection and pass in the array.

var myPublishedBooks = new MyBooksCollection(publishedBooks);

Or you could refresh your original collection.

this.books.refresh(publishedBooks)

Note that the 0.5.0 release in July 2011 renamed refresh to reset, so you can achieve this in newer versions of Backbone with;

this.books.reset(publishedBooks)


var collection = new Backbone.collection(yourArray)


I often do something like this:

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

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).

0

精彩评论

暂无评论...
验证码 换一张
取 消