Knockout验证不会显示ko.validatedObservable

时间:2015-08-20 09:57:59

标签: validation knockout.js

我有一个validatedObservables列表。例如其中一个:

self.CompanyName = ko.observable().extend({ required: true });
self.ContactPerson = ko.observable().extend({ required: true });
self.step1Validation = ko.validatedObservable([
        self.CompanyName,
        self.ContactPerson
    ]);

除了“必需”之外,我还有其他验证器。例如,电子邮件验证器。当用户输入错误的电子邮件并移至其他字段时,会出现红色错误消息。这意味着会生成错误消息并显示在附近的控件中。

但是,当我尝试一次验证所有validatedObservable时,错误消息不会出现在附近的控件上。如何解决这个问题?

验证看起来像这样(这是self函数):

  if (self.step1Validation.isValid()) {
      return true;
  } else {
      // SHOULD SOMEHOW SHOW ALL ERROR MESSAGE FOR THIS STEP (step1Validation)
      return false; // this doens't allow user to move to next step in wizard
  }

修改 这是一些简化的jsfiddler示例:http://jsfiddle.net/ng73s0hq/1/

在此示例中,如果您添加了错误的电子邮件并移至其他字段,则可以看到“红色错误消息”。但是,如果按“提交”,则验证失败,但没有错误消息(应该是必需的失败+电子邮件验证失败)。

2 个答案:

答案 0 :(得分:3)

您需要做的只是点击,您应该调用此$more来显示错误消息。

简化版 viewModel:

self.step1Validation.errors.showAllMessages()

工作样本 here

答案 1 :(得分:0)

您需要先验证ko.validatedObservable对象,如果无效,则使用showAllMessages(true)方法显示验证错误。

var result = ko.validation.group(self.step1Validation, {deep: true});  
if (self.step1Validation.isValid()) {
      return true;
  } else {
        result.showAllMessages(true);
      // SHOULD SOMEHOW SHOW ALL ERROR MESSAGE FOR THIS STEP (step1Validation)
      return false; // this doens't allow user to move to next step in wizard
  }