Durandaljs: как фильтровать ko.observablearray

я новичок в дурундадже

я хотел знать, как я могу отфильтровать ko.observablearray

определить(['сервисы/регистратор', 'данные/данные', 'функции/функция'], функция (регистратор, данные, функция) { var vm = { list: ko.observableArray([]) }; return vm; } );

я хочу отфильтровать элемент внутри списка и отобразить его в таблице

Спасибо


person whebz    schedule 26.03.2013    source источник


Ответы (1)


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

Вот полный список всех служебных методов для работы с массивами:

ko.utils.arrayFilter
ko.utils.arrayFirst
ko.utils.arrayForEach
ko.utils.arrayIndexOf
ko.utils.arrayMap
ko.utils.arrayPushAll
ko.utils.arrayRemoveItem
ko.utils.compareArrays
ko.utils.unwrapObservable

а Райан Нимейер написал хороший пост в блоге о том, как использовать некоторые их.


Способ 1

Вот краткий пример для начала:

var newList = ko.utils.arrayFilter(list(), function(item) {
   return item.price > 10;
});

Это создает newList предметов, цена которых превышает 10. Затем вы можете изменить свой текущий список, передав ему новый список:

list(newList);

Способ 2

Другой вариант — найти элементы, которые вы хотите удалить. Скажем, вы хотите удалить все предметы с ценой выше 10:

var rList = ko.utils.arrayFilter(list(), function(item) {
   return item.price > 10;
});

Далее вы можете позвонить:

list.removeAll(rList);

Способ 3

И, как говорится, метафорически содрать шкуру с кошки можно несколькими способами:

list.remove(function(item) { return item.price > 10 });

Вот тебе..

и я уверен, что есть много других способов сделать это. Если вам нужны более продвинутые способы фильтрации массивов, я бы порекомендовал посмотреть underscore.js.

person Evan Larsen    schedule 26.03.2013