敲除验证:即使未进行任何编辑,验证摘要也会在页面加载时显示必填字段错误

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