我正在尝试使用敲除验证库验证对象数组。对我来说,如何为一组可观察值形成验证组并不简单。我设法让它发挥作用的唯一方法是这样的(包含 JSFIDLE):
var Note = function () {
var self = this;
self.name = ko.observable().extend({ required: true });
};
var viewModel = function() {
var self = this;
self.notes = ko.observableArray([new Note(), new Note()]);
self.validatedObservables = function() {
var arr = [];
ko.utils.arrayForEach(self.notes(), function(note) {
arr.push(note.name);
});
return arr;
};
self.errors = ko.validation.group(self.validatedObservables());
self.submit = function () {
if (self.errors().length != 0) {
self.errors.showAllMessages();
}
};
};
ko.applyBindings(new viewModel());
看来我的方法不必要地冗长。根据源代码,您可以简单地将可观察量传递给 ko.validation.group:
self.errors = ko.validation.group(self.notes());
但这行不通。
有一个配置选项可以使分组深度(递归)。
它可以通过全局设置ko.validation.init( { grouping: { deep: true } } )
或在group
调用自身,例如:self.errors = ko.validation.group( self.notes(), {deep: true} );
在这里更新了小提琴:http://jsfiddle.net/KHFn8/4116/
顺便说一句,你这样做的方式可以写成更短的形式:
self.errors = ko.validation.group(
ko.utils.arrayMap(self.notes(), function(note) { return note.name }));
Edit:
我的小提琴不再适用于最新版本的 KO 验证。这是我给出答案时使用最新版本的相同小提琴(2012 年 6 月):http://jsfiddle.net/KHFn8/4117/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)