errors()中的第一项是[null]

Cal*_*ass 4 knockout.js knockout-validation

我有以下代码:

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 {
            ...
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我添加任务时,即使我正确输入了字段,它也会因某些原因无效.控制台输出[null].经过进一步调查,似乎即使我没有正确输入我的字段,我的taskErrors数组中的第一项始终是[null].所以看起来像:[null], "This field is required.".不知道我做错了什么?

编辑

这是我创建的问题的小提琴:http://jsfiddle.net/5kh6h/1/

Mou*_*nir 5

您的任务属性是可观察的(函数),因此要对其应用验证,您应该使用()传递对象.

self.taskErrors = ko.validation.group(self.task());
Run Code Online (Sandbox Code Playgroud)

当您的对象可观察时,您应该小心.

self.task = ko.observable(new JobTask());
Run Code Online (Sandbox Code Playgroud)

您可以像这样访问他的属性:

console.log(self.task().description);
Run Code Online (Sandbox Code Playgroud)

不是这样的:

console.log(self.task.description);
Run Code Online (Sandbox Code Playgroud)

没有()的任务是一个函数,而不是一个对象.

这是你的工作小提琴:http://jsfiddle.net/mounir/5kh6h/5/

祝好运