过滤Backbone Collection会返回一组模型

时间:2011-06-20 17:18:40

标签: javascript collections backbone.js underscore.js

示例代码:

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

我错过了什么?有没有办法将返回的数组转换为集合?

3 个答案:

答案 0 :(得分:34)

您可以实例化新的骨干集合并传入数组。

var myPublishedBooks = new MyBooksCollection(publishedBooks);

或者您可以刷新原始收藏。

this.books.refresh(publishedBooks)

注意 0.5.0 release in July 2011已将refresh重命名为reset,因此您可以在较新版本的Backbone中实现此功能;

this.books.reset(publishedBooks)

答案 1 :(得分:4)

var collection = new Backbone.collection(yourArray)

答案 2 :(得分:3)

我经常做这样的事情:

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

这将使用过滤后的模型创建与原始集合相同类型的实例,因此您可以继续使用集合方法(每个,过滤,查找,采集等)。