validationOptions不能与自定义bindingHandlers一起使用 [英] validationOptions not working with custom bindingHandlers

查看:84
本文介绍了validationOptions不能与自定义bindingHandlers一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用杜兰度/微风搭配淘汰赛.

I'm using durandal/breeze with Knockout.

我正在使用ko.validation对输入进行验证.

I am working on validation on my inputs with ko.validation.

这是经典之作:

<input type="text" data-bind="value: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />

.input-validation-error {
    background-color: #c75b55 !important;
}

这很好用:当验证失败时,输入文本框将标记为红色.

This one works pretty well: when validation failed, the input textbox is marked in red.

现在,我想使用bindingHandlers代替简单的" value绑定:

Now I would like to use a bindingHandlers in place of a 'simple' value binding:

<input type="text" data-bind="dateRW: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />

ko.bindingHandlers.dateRW = {
    //dateRW --> the 'read-write' version used both for displaying & updating dates
    init: function (element, valueAccessor, allBindingsAccessor) {
        var observable = valueAccessor();            
        //handle the field changing
        ko.utils.registerEventHandler(element, "change", function () {
            var value = $(element).val();
            var dateFormatted = moment.utc(value, "DD/MM/YYYY");
            //if (dateFormatted.isValid())
            if (dateFormatted)
                observable(dateFormatted.toDate())
            else 
                observable(null);
        });
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());
        var date = (typeof value !== 'undefined') ? moment.utc(value) : null;
        var dateFormatted = (date != null) ? date.format('DD/MM/YYYY') : '';
        $(element).val(dateFormatted);            
    }
};

通过此实施,验证有效,我的意思是ko.validation.group运行良好

With this implementation, validation works, I mean ko.validation.group is working well

var validationErrorsCount = ko.computed(function() {
    if (typeof itinerary() == 'undefined') return;
    var validationErrors = ko.validation.group(itinerary());
    return validationErrors().length;
});

但是输入文本框不再标记为红色.看来"validationOptions"仅适用于值绑定.

But the input textbox is no more marked in red. It seems that 'validationOptions' only work with the value binding.

有什么方法可以验证我的工作吗?

Any way to have my validation work?

谢谢.

推荐答案

验证框架具有用于值绑定的钩子,您需要调用

The validation framework have hooks for the value binding, you need to call

ko.validation.makeBindingHandlerValidatable("dateRW");

edit:其未定义 https://jsfiddle.net/it3xl/n7aqjor9/

edit: its not undefined https://jsfiddle.net/it3xl/n7aqjor9/

这篇关于validationOptions不能与自定义bindingHandlers一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆