Как карта работает с коллекцией Backbone?

цель: Я пытаюсь создать регистр поиск, который проходит через мою коллекцию и пытается сопоставить пользовательский запрос с атрибутом имени модели. Прямо сейчас, если я хочу найти конкретную модель, поисковый запрос должен быть точным.

кажется, что нет простого способа сделать что-то настолько простое в позвоночнике, а не из коробки. Функция map пришло на ум. Что делать, если бы я мог пройти через всю коллекцию и изменить атрибут имени модели в нижнем регистре, а затем изменить запрос пользователя в нижнем регистре, а также и вуаля!

но проблема в том, что я понятия не имею, как использовать Backbone Collection и

1 ответов


на самом деле все методы коллекции подчеркивания проксируются на магистрали.Объект коллекции. когда вы делаете collection.map(... возвращает массив объектов, возвращаемых отображаемой функцией. Решение представлено raina77ow не работает с позвоночником.Коллекция не является массивом и присваивает результат карты this.collection уничтожит саму коллекцию.

если вы хотите отфильтровать коллекцию, я бы рекомендовал использовать filter метод. ( Я предполагаю, что вы работаете с а Backbone.View:

var filter = this.$('#search-field').val(),
    filteredModels = this.collection.filter( function( model ) {
  return model.get('name').toLowerCase() === filter;
};
this.collection.reset( filteredModels );

обратите внимание, что любой из проксированных методов подчеркивания в коллекциях вернет массив моделей. Если вы хотите использовать их, вы можете сбросить коллекцию с этими моделями или, что эквивалентно, установить атрибут models коллекции в отфильтрованные результаты:this.collection.models = filteredModels. Первая форма имеет преимущество запуска a reset событие в коллекции, которое вы можете прослушать и, например, повторно отобразить свое представление.