У меня есть длинный список предметов, которые я хочу показать в <ul>
. Я хочу добавить вход «фильтр», чтобы пользователь мог сузить список элементов до тех, которые соответствуют фильтру.Как создать зависимость с Mithril.js?
Мой контроллер содержит filter
опоры и list
массива:
function Ctrl() {
this.filter = m.prop('');
this.list = [];
}
Я добавил update
метод контроллера, который смотрит на filter
реквизите и обновляет содержимое list
массива:
Ctrl.prototype.update = function (value) {
var _this = this;
if (this.filter()) {
searchItems(this.filter(), function (items) {
_this.list = items;
});
} else {
this.list = [];
}
};
И наконец, мое представление выполняет итерацию над массивом list
и отображает элементы. Кроме того, он отображает вход сверху, привязанный к filter
реквизита:
var view = function (ctrl) {
return m('#content', [
m('input', {
oninput: m.withAttr("value", ctrl.filter),
value: ctrl.filter()
}),
m('ul', [
ctrl.list.map(function (item, idx) {
return m('li', m('span', item.getName()));
})
])
]);
};
Мой вопрос, как сделать функцию огня update
когда значение filter
изменений, так что я получаю обновленный список элементов?
Должен ли я разместить два события oninput
? Один для обновления filter
и один для стрельбы update
?
Следует ли использовать одно событие oninput
и обновить свойство filter
в пределах его функции update
?
Что-нибудь еще?
Вы должны взглянуть на примере, приведенном в документе: http://lhorie.github.io/mithril-blog/organizing-components.html Это объясняет точно, что вы делаете: фильтрация списка. – fluminis