示例代码:
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(...)
我错过了什么?有没有办法将返回的数组转换为集合?
答案 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(...));
这将使用过滤后的模型创建与原始集合相同类型的实例,因此您可以继续使用集合方法(每个,过滤,查找,采集等)。