2013-04-04 52 views
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' 
}; 

我不知道我做了什么有正确的,也不清楚如何调用内可观察此验证。

有人可以帮我吗? 在此先感谢

回答

2

是你的权利,你应该创建一个custom validation来实现自己的目标。而且您无需调用验证函数,只要相关的依赖项(可观察项)发生更改,它就会自动调用。

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] 
     } 
    }); 
} 
+0

嗨,这很好,谢谢。最近你一直在帮我很多:)无论如何,我仍在努力使用自定义模板正确显示错误消息。我在这里解释过。 http://stackoverflow.com/questions/15802620/knockout-validation-issue-with-custom-message-tempalate如果你能帮助,很感激。谢谢 – devC 2013-04-04 13:12:09

1

我不知道这么多关于KO验证,但也许它可以是有用的为您

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

+0

我的确遵循了这一文件,发现了很多的帮助,在那里,但不幸的是对于这种特殊场景没有帮助。 – devC 2013-04-04 11:16:42