【问题标题】:Knockout-validation group error checking淘汰赛验证组错误检查
【发布时间】:2013-10-24 00:08:33
【问题描述】:

我有一个由两部分组成的淘汰赛表格。当第一部分被填写时,第二部分被隐藏。完成第一部分并单击“继续”后,第一部分被隐藏,第二部分显示。我希望能够验证第一组输入,如果没有错误则继续下一部分。

我在官方 github 页面上找到了this,我正在尝试这样做。

当我这样做时,没有检测到错误。继续第二部

function ReserveViewModel(){

    self.firstName = ko.observable("").extend({ required: true });

    self.continue = function(){
        var errors = ko.validation.group([ReserveViewModel.firstName]);
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}

但是,如果我这样做,它会起作用,但会尝试验证所有内容。由于第二组输入是空的,它就挂在那里。

self.continue = function(){
    self.errors = ko.validation.group(self);
    if (self.errors().length == 0) {

    }
    else{
        self.errors.showAllMessages();
    }
}

【问题讨论】:

  • 因此,如果您按照第一种方式进行操作,它会按照您的预期工作 - 为什么要使用第二种方式?为什么不只使用两个独立的视图模型并拥有两组验证规则?
  • 我不确定我理解你的意思。我要么没有得到验证,要么完全验证了我所展示的内容。我想我可以创建两个单独的视图模型,我从来没有这样想过。无论如何,我仍然对为什么我的示例在文档中以这种方式显示时无法正常工作感到困惑。
  • 当我读到你的问题时,我还不清楚为什么第一种方法不起作用。

标签: javascript jquery knockout.js knockout-validation


【解决方案1】:

您的代码无法正常工作有几个根本原因。在第一个示例中,您已经在视图模型的上下文中,因此您不需要使用 ReserveViewModel.firstName,而在第二个示例中,您要检查“self”中的所有内容,即检查我内部的所有内容验证。有两种简单的方法可以给这只猫剥皮(在我看来,只是短暂地使用过 KO.Validation) -

深度验证 -

function Person(firstname, lastname) {
    var firstName = ko.observable(firstname).extend({ required: true });
    var lastName = ko.observable(lastname).extend({ required: true });
}

function ReserveViewModel(){

    self.person = ko.observable(new Person('John', 'Jingleheimer'));

    self.continue = function(){
        var errors = ko.validation.group(self.person, { deep: true });
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}

这将验证 person 的所有属性及其“子”属性以确保验证。

下一个例子是简单地创建一个对象数组来检查 -

function myViewModel() {
    var self = this;
    self.firstName = ko.observable().extend({ required: true });
    self.lastName = ko.observable().extend({ required: true });
    self.someOtherProperty = ko.observable().extend({ required: true });

    var firstStepValidation = [
        self.firstName,
        self.lastName
    ];

    var secondStepValidation = [
        self.someOtherProperty
    ];

    self.continue = function(){
        var errors = ko.validation.group(firstStepValidation);
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}

这将允许你将你的 observables 'chunk' 成数组来进行测试。这可能比尝试创建单独的视图模型更容易。

【讨论】:

  • 非常感谢,第二个“块”示例正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2012-02-18
  • 2011-08-09
  • 2014-05-28
  • 2017-04-30
  • 2013-08-29
  • 2012-11-04
相关资源
最近更新 更多