我已经定义了像这样的验证规则
ko.validation.rules["studentValidation"] = {
validator: (val: any, params: any) => {
return (this.IsInRequiredRangeForStudent(params.DateOfBirth) && val === false);
}
}
IsInRequiredRangeForStudent = (dateOfBirth: any) () => {
//my implementation
}
这是我的ViewModel类,我在其中使用并在可观察的
上应用此规则this.isStudent = ko.observable<boolean>(isStudent).extend({
studentValidation: {
message: "Invalid student option!",
params: {
DateOfBirth: this.dateOfBirth()
}
}
});
在我的验证规则实现中,我总是将params.DateOfBirth视为null。我在这做错了什么?
答案 0 :(得分:1)
params.DateOfBirth可以为null,原因有几个。但首先我会检查一个场景。当您扩展isStudent observable时,您可以定义验证参数,以指定dateOfBirth observable的值。但是在分配时评估该值,我没有看到你的代码的其余部分,但是在分配给params时,dateOfBirth observable很可能是null。因此,每次进一步检查params.DateOfBirth都可能返回NULL值。
请尝试以下:
this.isStudent = ko.observable<boolean>(isStudent).extend({
studentValidation: {
message: "Invalid student option!",
params: {
DateOfBirth: this.dateOfBirth
}
}
});
和此:
ko.validation.rules["studentValidation"] = {
validator: (val: any, params: any) => {
return (this.IsInRequiredRangeForStudent(params.DateOfBirth()) && val === false);
}
}
它改变了什么?它将params.DateOfBirth定义为函数(不是值),因此您可以在每次验证调用时评估其值。