0

ボタンが押された後にエラーを表示するように検証グループを設定しようとしています。

私の問題は、検証エラーが変化するたびに検証グループを正しく更新できないことです。

私の例では、テキスト ボックスを離れるたびにフィールド オブザーバブルの .errors プロパティが正しく更新されていることがわかります (意図したとおりです)。検証グループの場合、ドキュメントは .showAllMessages() を呼び出すか、グループ自体を評価することを示しています。

以下に例を作成しました。私が見る行動の要約:

  • ロード時に、「必要な」検証メッセージが表示されます (ok)
  • フィールドで検証エラーが変更されるたびに、検証グループが更新されません (grrrr)
  • フィールドが完全に有効になると、検証グループが更新されます (ok)
  • フィールドが有効になった後に無効になると、最初の検証メッセージで更新されますが、上記のように正しく更新されません。

この例では、これらの検証を 1 つのフィールドに設定しました。

  • 必要
  • 最小の長さ: 3
  • 最大長: 10
  • 数値

景色:

<label>Test number</label>
    <input type="text" data-bind="value: myNumber"/>
    <div>myNumber error: <span data-bind="text: myNumber.errors"/></div>

<div>Validation group: 
    <ul data-bind="foreach: validationGroup"><li data-bind="text: $data"></li></ul>
</div>

<button type="submit" class="btn" data-bind="click: testValidate">Update validation group</button>

ビュー モデル:

var viewModel = {
        myNumber: ko.observable().extend({
                    maxLength: 10,
                    number: {
                        message: "Please ensure that myNumber contains only numeric characters"
                    },
                    required: {
                        message: "myNumber is required"
                    },
                    minLength: 3
                })
            };

viewModel.validationGroup = ko.validation.group([viewModel.myNumber]);

viewModel.testValidate = function () {
                            // Try both, to be sure...
                viewModel.validationGroup.showAllMessages();

                viewModel.validationGroup();
            };
4

2 に答える 2

0

そうですね、Knockout の古いバージョン (v1.0.1) のバグのようです。

最後にリリースされたバージョンは v1.0.2 (2012 年 9 月以降) であり、以下の動作サンプルは最新の GitHub からのものです: (最終更新日 2013 年 10 月)

上記と同じコードの JS Fiddle は、意図したとおりに動作します: http://jsfiddle.net/overflew/JhWZq/1/

したがって、グループを更新するために必要なのは .showAllMessages() だけです。

viewModel.testValidate = function () {
    viewModel.validationGroup.showAllMessages();
};

古いバージョンで終了する理由: NuGet (Microsoft .NET のパッケージ管理ツール) による KO 検証は、2013 年 6 月に v1.0.1 で最後に更新されましたが、現在は 1 つまたは 2 つのバージョンが遅れています。

于 2013-10-09T05:12:54.437 に答える