使用max-size和自定义验证器进行淘汰可选验证?

时间:2013-11-06 21:40:23

标签: javascript jquery validation knockout.js

我有一个VM,它有多个表单并且都有验证。为了支持多种形式,我认为我必须实现敲除可选验证。 我的表格中有很多验证。与maxLengthminlengthrequired和一次自定义验证一样。

验证看起来像这样

@password = ko.observable("").extend({ required: true, minLength: 5})
@current_password = ko.observable().extend({
      validation: { validator: @mustEqual, message: 'Passwords do not match.', params: @password }
    })

现在,要使用isLoggedIn使上述验证可选,请使用此

@password  = ko.observable().extend
  required:
    onlyIf: () =>
      !@isLoggedIn()

但它仅适用于required。我也想要minLengthcustom validator。怎么做?

1 个答案:

答案 0 :(得分:3)

onlyIf可以与所有验证器一起使用,比如这个(小提琴,分叉来自github示例:http://jsfiddle.net/LYP5u/25/):

 self.testField = ko.observable(5).extend({
        max:{
            onlyIf:function() { return self.country() === 'US'},
            params:5
        }
    });

验证来源示例:https://github.com/Knockout-Contrib/Knockout-Validation/blob/master/Src/api.js#L225

条件验证文档:https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Conditional-Validation-with-onlyIf-parameter

也许我们应该和其中一位维护人员讨论,以便在手册中更清楚地说明这一点,或许只添加一些例子,只有这一页https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-Rules