Проверка достоверности нокаута
У меня есть группа предметов, которые мне нужно проверить в целом. Я настраиваю validatedObservable
в группе, но сообщение об ошибке не отображается.
У меня есть упрощенный пример здесь. Я хочу, чтобы каждое число составляло от 0 до 100, а сумма - ровно 100. Как мне справиться с такого рода проверкой?
Обновление: я знаю, что в этом примере я мог бы просто сделать ko.computed
и подтвердить это, но это не то, что мне нужно.
Пример: http://jsfiddle.net/CGuW2/5/
0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br>
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br>
<span class="validationMessage" data-bind='text: isValidSum.errors()'></span>
ko.validation.rules['mustEqual'] = {
validator: function (val, otherVal) {
return (parseInt(val.num1()) + parseInt(val.num2())) == otherVal;
},
message: 'total must equal {0}'
};
ko.validation.registerExtenders();
var viewModel = {
num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }),
num2: ko.observable("50").extend({ number: true, min: 0, max: 100 })
};
viewModel.isValidSum = ko.validatedObservable({
num1: viewModel.num1,
num2: viewModel.num2
}).extend({ mustEqual: 100 });
ko.applyBindings(viewModel);
2 ответа
Мне нужно было связать text: isValidSum.error
вместо text: isValidSum.errors()
, Кроме того, похоже, что вы должны связать visible: !isValidSum.isValid()
когда ты это сделаешь.
Итак, мое решение выглядит так:
Пример: http://jsfiddle.net/CGuW2/6/
0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br>
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br>
<span class="validationMessage" data-bind='visible: !isValidSum.isValid(), text: isValidSum.error'></span>
Проверьте эту скрипку, я проверил проверку суммы.
http://jsfiddle.net/CGuW2/3/
Я думаю, что проблема заключалась в том, что вы не можете использовать extend
на validatedObservable