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

时间:2016-02-13 19:12:46

标签: knockout.js knockout-validation

我正在使用敲除验证,并将其配置为仅在修改字段时才显示错误。只要“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());

感谢。

1 个答案:

答案 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