0

オブザーバブルのオブザーバブル配列があります-各オブザーバブルはrequire用に拡張されていますが、クリアされたフィールドでフォームを保存すると、エラーが収集されないか、表示するエラーがあります-

ko.validation.configure({
    grouping: {
        deep: true,
        observable: true
    }
});


var viewModel = function () {
    var self = this;
    var data = {
        "deadzone": "0.2",
            "sloperange": "2",
            "stepsize": "0.8",
            "setpoint": "0.75",
            "pressure": "1"
    };
    self.defaultCalculations = ko.observableArray([]);
    self.defaultCalculationProperties = function (defaults) {
        var self = this;
        var properties = defaults;
        self.deadzone = ko.observable(properties.deadzone || '').extend({
            required: {
                message: '*required'
            }
        });
        self.sloperange = ko.observable(properties.sloperange || '').extend({
            required: {
                message: '*required'
            }
        });
        self.stepsize = ko.observable(properties.stepsize || '').extend({
            required: {
                message: '*required'
            }
        });
        self.setpoint = ko.observable(properties.setpoint || '').extend({
            required: {
                message: '*required'
            }
        });
        self.pressure = ko.observable(properties.pressure || '').extend({
            required: {
                message: '*required'
            }
        });

    };
    //populate calculation values
    self.populateCalculationDefaults = function (data) {

        //pushing data to an array and mapping each item
        var temp = [];
        temp[0] = data;
        var mappedTasks = _.map(temp, function (item) {
            return new self.defaultCalculationProperties(item);
        });

        self.defaultCalculations(mappedTasks);
    };

    self.save = function (model) {
        //console.log(model);
        console.log(self.errors().length, self.errors.showAllMessages());
        if (self.errors().length != 0) {
            self.errors.showAllMessages();
        }
    };
    self.errors = ko.validation.group(self.defaultCalculations());

    self.populateCalculationDefaults(data);
};

ko.applyBindings(new viewModel());

問題が何であるかわからず、スタックフローを精査しました-何か提案はありますか?

http://jsfiddle.net/kmcadams/W2SZb/

4

2 に答える 2

1

最も簡単な方法は、populate 関数内で ko.validation.group を再度呼び出すことです。私が好む別のオプションは、defaultcalculations にサブスクライブし、そこでグループ呼び出しを実行することです。

self.defaultCalculations.subscribe(function () {
    self.errors = ko.validation.group(self.defaultCalculations);
});

これにより、defaultCalculations にアイテムが追加/削除されるたびに実行される関数が手動でサブスクライブされます。

于 2013-05-29T01:13:59.213 に答える
0

また、observable を拡張するときに常に通知を追加することもできます。

this.validationModel = ko.validatedObservable({
    Num: ko.observable(this.Num).extend({ number: true, notify: 'always' }),
});

それは私のために働いた。以前は、this.Num が変更されていない場合、検証されませんでした。

于 2014-03-21T10:59:25.770 に答える