1

https://github.com/ericmbarnard/Knockout-Validation/wiki/Native-Rules

MCV3 ページでノックアウト検証を使用しています。私が持っている状況は、ボタンが2つあるということです。1 つはコレクションに追加、もう 1 つは保存です。コレクションに追加では、必要に応じて次のプロパティが検索されます。

FirstName: ko.observable().extend({ required: true }),
LastName: ko.observable().extend({ required: true }),
Title: ko.observable(),
Email: ko.observable().extend({ required: true, email: true }),
Date1: ko.observable(new Date()).extend({ required: true }),

ページが有効かどうかを確認する 2 つの関数が定義されています。

最初:

AddToCollection: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                this.Collection.push(new Item(this.FirstName(), this.LastName(), this.Title(), this.Email()));
                viewModel.clear();
            }
        },

そして2番目:

save: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                $.ajax({
                    url: '@Url.Action("DoSomethinn")',
                    type: "POST",
                    data: ko.toJSON(this),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (result) {

                    }
                });
            }
        }

私がしようとしているのは、Save が呼び出された場合に FirstName、LastName、および Email が必要とされないようにすることです。Date1 のみが検証されますが、AddToCollectoin が呼び出されたときに FirstName、LastName、および Email が必要ですが、 Date1 ではありません。Only If Native ルールを設定する方法、またはこれを行うためのより良い方法はありますか。

どんな助けでも大歓迎です!

4

1 に答える 1

4

onlyIfオプションはここで機能する可能性があります:

FirstName: ko.observable().extend({ 
    required: {
        params: true,
        onlyIf: function(){ return someFlagIsTrue; }
    }

someFlagIsTrueクリックイベントまたはその他の手段からを設定する必要があります。

于 2013-01-11T16:15:54.403 に答える