我正在使用敲除验证,并将其配置为仅在修改字段时才显示错误。只要“configMessages”对于配置为真,它就能完美地工作。
但是,我更喜欢在表单底部使用“验证摘要”,而不是在每个字段旁边插入验证错误消息。我将验证摘要绑定到模型的错误列表。
问题是错误列表包含所有错误,无论相应的viewmodel值是否已被修改。
如何过滤以仅获取与修改后的viewmodel成员相对应的错误?
我的fiddle 正在使用两种显示技术:插入消息和汇总消息。您可以看到插入的消息按预期工作:仅出现在字段更改或提交;而在表单加载时会立即显示汇总的消息。
ko.validation.init({
errorElementClass: 'ui-state-error',
decorateInputElement: true
});
var model = function() {
self = this;
self.firstName = ko.observable().extend({
required: true
});
self.lastName = ko.observable().extend({
required: true
});
self.errors = ko.validation.group(this);
self.submit = function() {
if (self.errors().length == 0) {
alert('No errors');
} else {
self.errors.showAllMessages();
}
return false;
};
};
ko.applyBindings(new model());
感谢。
答案 0 :(得分:2)
我找到了一种方法来过滤与修改过的observable相对应的错误。
self.visibleErrors = ko.computed(function() {
var errors = [];
self.errors.forEach(function(observable) {
if (ko.validation.utils.isValidatable(observable) && !observable.isValid() && observable.isModified()) {
errors.push(observable.error.peek());
}
})
return errors;
});
更新了fiddle。