Коллекция магистрального поиска для модели с атрибутом, совпадающим со строкой

В данный момент я пишу функцию поиска для своего приложения Backbone. Идея состоит в том, что пользователь может ввести строку, а приложение будет искать и возвращать любые совпадающие модели, в которых строка появляется в любом из своих атрибутов. Пока у меня есть следующее,

функция просмотра запускается по клавише,

this.results = this.collection.search(letters);

Это запускает следующий код, расположенный в коллекции,

search: function( filterValue ) {

    filterValue = filterValue.toLowerCase();

    var filterThroughValue = function(data) {

        return _.some(_.values(data.toJSON()), function(value) {
            console.log(value);
            if(value != undefined) {
                value = (!isNaN(value) ? value.toString() : value);
                return value.toLowerCase().indexOf(filterValue) >= 0;
            }
        });
    };

    return App.Collections.filterCollection = this.filter(filterThroughValue);
}

Однако при этом я получаю следующую ошибку:

Uncaught TypeError: undefined не является функцией

эта ошибка отображается как строка return value.toLowerCase().indexOf(filterValue) >= 0;, и эта ошибка возвращается независимо от того, использую ли я строку, которая, как я знаю, существует в модели коллекции.

Есть ли исправление для этого или лучший способ поиска и возврата только моделей, в которых есть модели, содержащие строку поиска?


person Udders    schedule 15.05.2015    source источник


Ответы (1)


Поскольку вам просто нужно строковое представление значения, вы, вероятно, можете просто проверить, имеет ли значение метод toString. Обратите внимание, что у String также есть метод toString, поэтому он будет работать, если значением является String.

return _.some(_.values(data.toJSON()), function(value) {
  if(value && value.toString) {
    return value.toString().toLowerCase().indexOf(filterValue) >= 0;
  }
  return false;
}
person Tyler Marien    schedule 15.05.2015