ボタンが押された後にエラーを表示するように検証グループを設定しようとしています。
私の問題は、検証エラーが変化するたびに検証グループを正しく更新できないことです。
私の例では、テキスト ボックスを離れるたびにフィールド オブザーバブルの .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();
};