敲除验证:即使未进行任何编辑,验证摘要也会在页面加载时显示必填字段错误
Knockout Validation: Validation Summary displays required field errors at page load even though no edits were made
我正在使用敲除验证并将其配置为仅在修改字段时才显示错误。只要配置 "insertMessages" 为真,它就可以完美运行。
但是,我更喜欢在表单底部使用 "validation summary",而不是在每个字段旁边插入验证错误消息。我将验证摘要绑定到模型的错误列表。
问题是错误列表包含所有错误,无论相应的 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());
谢谢。
我找到了一种方法来过滤与修改后的可观察对象对应的错误。
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。
我正在使用敲除验证并将其配置为仅在修改字段时才显示错误。只要配置 "insertMessages" 为真,它就可以完美运行。
但是,我更喜欢在表单底部使用 "validation summary",而不是在每个字段旁边插入验证错误消息。我将验证摘要绑定到模型的错误列表。
问题是错误列表包含所有错误,无论相应的 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());
谢谢。
我找到了一种方法来过滤与修改后的可观察对象对应的错误。
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。