淘汰赛验证需要元素

时间:2016-02-05 03:45:24

标签: knockout.js knockout-validation

我想将整个元素传递给我的验证。

元素:

<input id="txtPhoneNumber" data-bind="value: Phone, intlTelInput: Phone" name="phone" type="text" class="form-control">

JS KO:

            ko.validation.rules['validPhone'] = {
              validator: function (val) {
                return val.intlTelInput('isValidNumber');
              },
              message: 'Invalid Phone Number'
            }

我遇到的问题是我不想重写intlTelInput,它不仅仅是一个直接值。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不赞成将元素传递给淘汰验证,但是如果你真的想这样做那么你可以制作一个自定义绑定来传递observable来验证然后从那个自定义绑定你可以扩展可观察到验证器并将元素传递给它。

1 ..制作验证器

`ko.validation.rules['validPhone'] = {
    validator: function (val, element) {
        //do what you want with the element here
        return val.intlTelInput('isValidNumber');
    },
    message: 'Invalid Phone Number'
}`

2 ..进行自定义绑定

ko.bindingHandlers.validPhone = {
    init: function(element, valueAccessor){
        var observable = valueAccessor();
        observable.extend({validPhone: element}) 
    }
}

3 ..元素应该像这样定义

<input id="txtPhoneNumber" data-bind="value: Phone, validPhone: Phone, intlTelInput: Phone" name="phone" type="text" class="form-control" >