定义Knockout验证规则,该规则使用typescript获取可观察的参数

时间:2016-10-21 13:35:37

标签: validation typescript knockout.js parameters null

我已经定义了像这样的验证规则

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。我在这做错了什么?

1 个答案:

答案 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定义为函数(不是值),因此您可以在每次验证调用时评估其值。