Фильтрация коллекции Backbone возвращает массив моделей - PullRequest
25 голосов
/ 20 июня 2011

Пример кода:

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

Но я все еще не могу запустить такие вещи, как: Опубликовал Books.each (...), или publishedBooks.get (...)

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

Ответы [ 3 ]

34 голосов
/ 20 июня 2011

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

var myPublishedBooks = new MyBooksCollection(publishedBooks);

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

this.books.refresh(publishedBooks)

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

this.books.reset(publishedBooks)
4 голосов
/ 15 февраля 2013
var collection = new Backbone.collection(yourArray)
3 голосов
/ 03 декабря 2014

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

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

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

...