12

ノックアウト検証を使用するビューモデルに次の属性があります。そのうちの1つは、パスワードの一致を確認するためのカスタム検証です。

model.Password = ko.observable()
                  .extend({ required: { message: "Password is required.", 
                        params: true,
                        onlyIf: function () { return model.IsCredentialsRequired(); }}
                    });


model.ConfirmPassword = ko.observable().
                        extend({ validation: { validator: mustEqual,
                        message: 'Passwords do not match.',
                        params: model.Password,               
                        onlyIf: function () { return model.IsCredentialsRequired(); } }
                    });

カスタム検証関数のコード

var mustEqual = function (val, other) {
                return val == other();
            };

に応じ てOnlyIf条件が正常に機能していることがわかりましたが、機能していません。なぜこれが起こっているのか誰か助けてもらえますか?カスタムルールに条件付き検証を使用できる別の方法はありますか?model.Passwordmodel.IsCredentialsRequired()model.ConfirmPassword

前もって感謝します

4

1 に答える 1

18

ノックアウト検証は現在、匿名ルールの「onlyIf」をサポートしていません。ただし、カスタム ルールではサポートされています。したがって、カスタム ルールを作成し、それで onlyIf を使用できます。

ko.validation.rules['confirmPasswordMatches'] = {
    validator: function (val, params) {
        var otherValue = params;
        return val === ko.validation.utils.getValue(otherValue);
    },
    message: 'Passwords do not match.',
};
ko.validation.registerExtenders();

function ViewModel() {
    var self = this;

    self.IsCredentialsRequired = ko.observable(true);

    self.Password = ko.observable()
        .extend({
            required: {
                message: "Password is required.",
                params: true,
                onlyIf: self.IsCredentialsRequired
            }
    });

    self.ConfirmPassword = ko.observable().
    extend({
            confirmPasswordMatches: {
            params: self.Password,
            onlyIf: self.IsCredentialsRequired
        }
    });

}

フィドル: http://jsfiddle.net/delixfe/mFAEx/

于 2013-01-30T10:35:53.250 に答える