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

时间:2012-11-14 10:50:56

标签: 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 {
            ...
        }
    };
}

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

修改

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

2 个答案:

答案 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!');
        }
    };

}