5

次のコードを考えてみましょう-

var MyObjectModel = function(myObject){
var self = this;
self.myNumber1 = ko.observable(myObject.number1).trimmed();
self.myNumber2 = ko.observable(myObject.number2).trimmed();

myNumber1とmyNumber2を拡張して、両方が空の場合はエラーをスローし、どちらかに値がある場合は正常に維持されるように、ノックアウト検証を追加したいと思います。

これを達成するために私がどのように取り組むことができるかについて何か考えはありますか?

4

2 に答える 2

9

ko.computedを使用して、両方のフィールドの少なくともいずれかが設定されているかどうかをチェックする関数を作成し、検証でonlyIfを使用して、条件付きで検証を実行できます。

var MyObjectModel = function (myObject) {
    var self = this;
    self.myNumber1 = ko.observable(myObject.number1);
    self.myNumber2 = ko.observable(myObject.number2);

    self.numbersHaveNoValue = ko.computed(function () {
        var value1 = self.myNumber1(), value2 = self.myNumber2();
        return !ko.validation.rules.required.validator(value1, true) &&
               !ko.validation.rules.required.validator(value2, true);
    });

    self.myNumber1.extend({ required: { onlyIf: self.numbersHaveNoValue }});
    self.myNumber2.extend({ required: { onlyIf: self.numbersHaveNoValue }});
}

私はフィドルを作成しました:http://jsfiddle.net/delixfe/aBytt/

于 2013-01-25T13:10:11.443 に答える
2
var MyObjectModel = function(myObject) {
    var self = this;
    self.myNumber1 = ko.observable(myObject.number1).trimmed();
    self.myNumber2 = ko.observable(myObject.number2).trimmed();

    self.numberCount = ko.computed(function() {
        var count = 0;
        count += self.myNumber1() != '' ? 1 : 0;
        count += self.myNumber2() != '' ? 1 : 0;
        return count;
    }).extend({min:1});
}
于 2014-01-14T16:14:59.030 に答える