淘汰赛自定义验证问题

时间:2013-04-04 10:31:20

标签: validation knockout.js

假设我有一个具有以下属性的模型:

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中调用此验证。

有人可以帮帮我吗? 提前致谢

2 个答案:

答案 0 :(得分:2)

是的,你是对的,你应该创建一个custom validation来实现你的目标。并且您无需调用验证函数,只要其关联的依赖项(observables)发生更改,它就会自动调用。

Wroking Fiddle

注意:请应用其他必要的验证,如数字等。因为如果您在小提琴代码中的任何输入字段中输入文字,结果可能是错误。

以下是自定义验证码:

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验证知之甚少,但可能对你有用

https://github.com/ericmbarnard/Knockout-Validation