假设我有一个具有以下属性的模型:
function ViewModel() {
this.SetupTime = ko.observable();
this.CloseTime = ko.observable();
this.MinHrs = ko.observable();
}
我需要添加验证规则,以便MinHrs> (SetupTime + CloseTime)。每当更改三个字段中的一个时,应该触发此验证。我知道我必须为此编写自定义验证,例如:
ko.validation.rules['ValidWorkRange'] = {
validator: function (val, setuptime, closetime, minhrs) {
return minhrs > (setuptime+closetime);
},
message: '(Shift End - Shift Start) >= Shortest Work Segment'
};
我不确定我做了什么是正确的,也不确定如何在observable中调用此验证。
有人可以帮帮我吗? 提前致谢
答案 0 :(得分:2)
是的,你是对的,你应该创建一个custom validation来实现你的目标。并且您无需调用验证函数,只要其关联的依赖项(observables)发生更改,它就会自动调用。
注意:请应用其他必要的验证,如数字等。因为如果您在小提琴代码中的任何输入字段中输入文字,结果可能是错误。
以下是自定义验证码:
var ValidWorkRange = function(val, param)
{
if(val && param){
var minHrs = parseInt(val, 10);
var setupTime = parseInt(param[0](), 10);
var closeTime = parseInt(param[1](), 10);
return minHrs > (setupTime+closeTime);
}
};
并且像这样你可以在你的观察中应用它:
function ViewModel() {
var self = this;
self.SetupTime = ko.observable();
self.CloseTime = ko.observable();
self.MinHrs = ko.observable().extend
({
validation: {
validator: ValidWorkRange,
message: 'Not valid.',
params: [self.SetupTime, self.CloseTime]
}
});
}
答案 1 :(得分:1)
我对ko验证知之甚少,但可能对你有用