我正在使用durandal/breeze和Knockout。
我正在使用ko.validation对我的输入进行验证。
这是一个经典的例子:
<input type="text" data-bind="value: myDate, validationOptions: { errorElementClass: 'input-validation-error'}" />
.input-validation-error {
background-color: #c75b55 !important;
}这个方法运行得很好:当验证失败时,输入的文本框被标记为红色。
现在我想用一个bindingHandlers代替一个“简单的”value绑定:
<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工作得很好
var validationErrorsCount = ko.computed(function() {
if (typeof itinerary() == 'undefined') return;
var validationErrors = ko.validation.group(itinerary());
return validationErrors().length;
});但输入文本框不再标记为红色。看起来'validationOptions‘只适用于值绑定。
有没有办法让我的验证起作用?
谢谢。
发布于 2013-04-29 18:30:20
验证框架具有用于值绑定的挂钩,您需要调用
ko.validation.makeBindingHandlerValidatable("dateRW");编辑:它不是未定义的https://jsfiddle.net/it3xl/n7aqjor9/
发布于 2013-04-29 18:34:04
看看它调用的knockout-validation.js源代码:
使value绑定可自动验证的makeBindingHandlerValidatable('value')。
您可以尝试添加对makeBindingHandlerValidatable的调用来注册您的处理程序:
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');发布于 2015-04-20 05:44:54
具有空元素的validationMessage绑定。
我不想把文本框标记成红色。
有时,允许对validationMessage绑定使用额外的空标记(span)。
<input data-bind="datepickerCustom: myDate"/>
<span data-bind="validationMessage: myDate" class="validationMessage"></span>https://stackoverflow.com/questions/16275700
复制相似问题