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

タスク属性はobservable(関数)であるため、検証を適用するには、オブジェクトに()を渡す必要があります。

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 に答える