【问题标题】:Knockout Validation Need the Element淘汰赛验证需要元素
【发布时间】:2016-05-14 22:41:52
【问题描述】:

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

元素:

<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 ,它接受一个元素而不仅仅是一个直接值。有什么建议吗?

【问题讨论】:

  • 为什么需要访问元素?你没有真正需要这样做。坦率地说,这不是您应该做的事情,它会限制您的验证器的可用性。

标签: knockout.js knockout-validation


【解决方案1】:

我不赞成将元素传递给淘汰赛验证,但如果您真的想这样做,那么您可以创建一个自定义绑定,该绑定将传递 observable 进行验证,然后从该自定义绑定中您已经可以将 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" >

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2023-03-09
    • 2012-02-18
    • 2011-08-09
    • 2013-05-16
    • 2012-11-04
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多