ASP.NET MVC スタイルの検証の概要にバインドしているエラー コレクションを含むビュー モデルがあります。問題は、エラー コレクションがモデルの現在の状態で常に最新であるとは限らないことです。
function CostEditViewModel() {
var self = this;
self.description = ko.observable().extend({ required: { message: "Please enter the description", params: true } });
self.amount = ko.observable()
.extend({ required: { message: "Please enter the amount", params: true } })
.extend({ number: { message: "The amount is not valid", params: true } });
self.displayErrors = ko.observable(false);
self.errors = ko.validation.group(self);
self.add = function() {
self.edit(new Cost({ Description: '', Amount: '' } ));
};
self.edit = function(cost) {
self.description(cost.Description());
self.amount(cost.Amount());
self.displayErrors(false);
self.description.isModified(false);
self.amount.isModified(false);
};
self.save = function() {
if (self.isValid()) {
DoAjaxSave();
} else {
self.displayErrors(true);
}
};
}
そして、エラーを UL にバインドします
<div class="alert alert-error" data-bind="visible: displayErrors() && errors().length > 0">
<ul data-bind="foreach: errors">
<li data-bind="text: $data"></li>
</ul>
</div>
問題は、検証の概要に表示されるエラーが常に最新ではないことです。金額でエラーをトリガーした場合、正しいエラーはコレクションにありますが、金額の他のエラーをトリガーした場合、フィールドの横に正しいエラーが表示されても、エラー コレクションの内容は変更されません。エラーの正しいコレクションを取得するには、1 つのフィールドが有効と無効の間で状態を変更する必要があります。フィールドが無効な状態から別の無効な状態に変化した場合、エラー コレクションは更新されません。
これは、例を示すために作成したフィドルです。