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);
}

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/

4

2 回答 2

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/

祝你好运

于 2012-11-14T13:24:58.003 回答
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!');
        }
    };

}
于 2012-11-14T13:18:38.187 回答