Dzi*_*mid 8 knockout-2.0 knockout.js knockout-validation
我试图使用knockout验证lib来验证一个对象数组.对于如何为可观察数组形成验证组,我并不是直截了当的.我设法使其工作的唯一方法是这样(包括JSFIDDLE):
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());
Run Code Online (Sandbox Code Playgroud)
看起来我的方法不必要地冗长.根据源代码,您只需将一个observable传递给ko.validation.group:
self.errors = ko.validation.group(self.notes());
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
ant*_*hok 14
有一个配置选项可以将分组设置为深层(递归).它可以全局设置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 }));
Run Code Online (Sandbox Code Playgroud)
编辑:我的小提琴不再适用于最新版本的KO验证.在我给出答案的时候(2012年6月)使用最新版本的同一个小提琴:http://jsfiddle.net/KHFn8/4117/
| 归档时间: |
|
| 查看次数: |
9287 次 |
| 最近记录: |