为什么没有validatedObservable添加errors.showAllMessages如ko.validation.group

时间:2014-03-13 19:24:49

标签: knockout-validation

我有两个视图模型,一个用validation.group创建,另一个用validatedObservabel创建。方法errors.showAllMessages()对于第二个视图模型失败。为什么呢?

function VM1 {
    this.errors = ko.validation.group(this);
    email:ko.observable().extend({required:true})
}
var vm1 = new VM1();

if (!vm1.isValid()) {
    vm1.errors.showAllMessages(); //works fine
}

function VM2 {
    this.errors = ko.validatedObservable(this);
    email:ko.observable().extend({required:true})
}
var vm2 = new VM2();

if (!vm2.isValid()) {
    vm2.errors.showAllMessages(); //fails
}

1 个答案:

答案 0 :(得分:2)

validatedObservable是validation.group的包装器,它提供了更多的特性和功能。它通过内部创建validation.group来实现这一点。要访问validation.group方法(例如showAllMessages),您需要通过validatedObservable上的'errors'属性显式访问内部validation.group对象。

即。

function VM2 {
    this.errors = ko.validatedObservable(this);
    email:ko.observable().extend({required:true})
}
var vm2 = new VM2();

if (!vm2.isValid()) {
    vm2.errors.showAllMessages(); //fails
    vm2.errors.errors.showAllMessages(); // Works!    
}

显然,使用errors.errors看起来有点奇怪,但这只是因为你命名了validatedObservable'错误'。如果你称它为'validationModel'

,语法会更好看

e.g。

function VM2 {
    this.validationModel= ko.validatedObservable(this);
    email:ko.observable().extend({required:true})
}
var vm2 = new VM2();

if (!vm2.isValid()) {
    vm2.validationModel.errors.showAllMessages(); // Works!

}