1

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

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

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

4

2 回答 2

2

是的,你是对的,你应该创建一个自定义验证来实现你的目标。而且您无需调用验证函数,只要其关联的依赖项(可观察对象)发生变化,就会自动调用它。

工作小提琴

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

这是自定义验证代码:

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);
  }
};

像这样你可以将它应用到你的 observable 上:

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] 
       }
     });
}
于 2013-04-04T11:48:17.430 回答
1

我不太了解 ko 验证,但它可能对你有用

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

于 2013-04-04T11:08:53.480 回答