首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用自定义bindingHandlers的validationOptions

不使用自定义bindingHandlers的validationOptions
EN

Stack Overflow用户
提问于 2013-04-29 17:52:06
回答 3查看 3.1K关注 0票数 7

我正在使用durandal/breeze和Knockout。

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

这是一个经典的例子:

代码语言:javascript
复制
<input type="text" data-bind="value: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />

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

这个方法运行得很好:当验证失败时,输入的文本框被标记为红色。

现在我想用一个bindingHandlers代替一个“简单的”value绑定:

代码语言:javascript
复制
<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工作得很好

代码语言:javascript
复制
var validationErrorsCount = ko.computed(function() {
    if (typeof itinerary() == 'undefined') return;
    var validationErrors = ko.validation.group(itinerary());
    return validationErrors().length;
});

但输入文本框不再标记为红色。看起来'validationOptions‘只适用于值绑定。

有没有办法让我的验证起作用?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-29 18:30:20

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

代码语言:javascript
复制
ko.validation.makeBindingHandlerValidatable("dateRW");

编辑:它不是未定义的https://jsfiddle.net/it3xl/n7aqjor9/

票数 13
EN

Stack Overflow用户

发布于 2013-04-29 18:34:04

看看它调用的knockout-validation.js源代码:

使value绑定可自动验证的makeBindingHandlerValidatable('value')

您可以尝试添加对makeBindingHandlerValidatable的调用来注册您的处理程序:

代码语言:javascript
复制
ko.bindingHandlers.dateRW = {
    //dateRW --> the 'read-write' version used both for displaying & updating dates
    init: function (element, valueAccessor, allBindingsAccessor) {
       ...
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
       ...
    }
};

ko.validation.makeBindingHandlerValidatable('dataRW');
票数 2
EN

Stack Overflow用户

发布于 2015-04-20 05:44:54

具有空元素的validationMessage绑定。

我不想把文本框标记成红色。

有时,允许对validationMessage绑定使用额外的空标记(span)。

代码语言:javascript
复制
<input data-bind="datepickerCustom: myDate"/>
<span data-bind="validationMessage: myDate" class="validationMessage"></span>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16275700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档