Подтвердить что ты не робот

Фильтрация коллекции Backbone возвращает массив моделей

Пример кода:

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

Что мне не хватает? Есть ли способ преобразования возвращенного массива в коллекцию?

4b9b3361

Ответ 1

Вы можете либо создать новую базовую коллекцию, либо передать ее в массив.

var myPublishedBooks = new MyBooksCollection(publishedBooks);

Или вы можете обновить исходную коллекцию.

this.books.refresh(publishedBooks)

Примечание, что 0.5.0 релиз в июле 2011 года переименован refresh в reset, так что вы можете достичь этого в новее версии Backbone с;

this.books.reset(publishedBooks)

Ответ 2

var collection = new Backbone.collection(yourArray)

Ответ 3

Я часто делаю что-то вроде этого:

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

Это создаст экземпляр того же типа, что и исходная коллекция, с отфильтрованными моделями, чтобы вы могли продолжить методы сбора (каждый, фильтр, найти, выщипывать и т.д.).