我有以下代码:
function JobTask() {
var self = this;
self.description = ko.observable('').extend({
required: true
});
self.priority = ko.observable('').extend({
number: true,
required: true
});
self.complete = ko.observable(false);
}
function CreateJobViewModel() {
var self = this;
self.task = ko.observable(new JobTask());
self.taskErrors = ko.validation.group(self.task);
self.addTask = function () {
if (self.taskErrors().length) {
console.log(self.taskErrors());
self.taskErrors.showAllMessages();
}
else {
...
}
};
}
问题是,当我添加任务时,即使我已正确输入字段,它也会因某些原因无效。控制台输出[null]
。经过进一步调查,似乎即使我没有正确输入我的字段,我的taskErrors
数组中的第一项始终是[null]
。所以看起来像是:[null], "This field is required."
。不确定我做错了什么?
这是我为问题创建的小提琴:http://jsfiddle.net/5kh6h/1/
答案 0 :(得分:5)
您的任务属性是可观察的(函数),因此要对其应用验证,您应该使用()传递对象。
self.taskErrors = ko.validation.group(self.task());
当您的物体可以观察时,您应该小心。
self.task = ko.observable(new JobTask());
您可以像这样访问他的属性:
console.log(self.task().description);
不喜欢这样:
console.log(self.task.description);
任务没有()是一个函数而不是一个对象。
这是你的工作小提琴:http://jsfiddle.net/mounir/5kh6h/5/
祝你好运答案 1 :(得分:4)
将错误移至JobTask
,问题就会消失。
http://jsfiddle.net/jearles/5kh6h/4/
-
function JobTask() {
var self = this;
self.description = ko.observable('').extend({
required: true
});
self.priority = ko.observable('').extend({
number: true,
required: true
});
self.complete = ko.observable(false);
self.errors = ko.validation.group(self);
}
function CreateJobViewModel() {
var self = this;
self.task = ko.observable(new JobTask());
self.addTask = function() {
if (self.task().errors().length) {
console.log(self.task().errors());
self.task().errors.showAllMessages();
}
else {
alert('Success!');
}
};
}