Knockout.jsを使用して、フォームのエラーを強調表示したいと考えています。これらのエラーの中には、クライアント側の検証によって生成されるものもあれば、フォームの保存時にサーバーから発生するものもあります。理想的には、テンプレートは次のようになります。
<label data-bind="css: { error: Errors.ProjectName }">Project Name<input data-bind="value: ProjectName" /></label>
Errors.ProjectName
が true-ish の場合、上記の<label>
CSS クラスはerror
.
Errors
ただし、これを行うには、次のようなものを作成する必要があると思います。
this.Errors = {
ProjectName: ko.observable(false),
FieldA: ko.observable(false),
FieldB: ko.observable(false),
// ... Every single field
};
このフォームには非常に多くのフィールドがあるため、これはメンテナンスの悪夢です。そのため、そうするのではなく、モデルに何らかの形でエラー フィールドのリストを含めたいと考えています。もっと好き:
this.Errors = ko.observableArray( [] );
コードがエラーを認識したら、その配列をエラーを含むフィールドのリストに設定するだけです。
model.Errors( ['ProjectName'] ); // ProjectName is invalid
テンプレートは次のようになります。
<label data-bind="css: { error: Errors.indexOf('ProjectName') >= 0 }">Project Name<input data-bind="value: ProjectName" /></label>
これは機能しますが、テンプレートで監視可能な配列インデックスをチェックする必要があるのはかなり面倒です。Knockout をマスターしようとしている私の一部は、よりクリーンで読みやすい方法を求めています。
Knockout.js は、エラー メッセージの表示や UI の検証に使用する適切なツールではないと主張する人もいるかもしれません。これはおそらく正しい意見です。ただし、エラーを保存する単一のモデルを使用するというアイデアが気に入っています。そのモデルにエラーが追加または削除されると、エラー メッセージと UI の強調表示されたフィールドにこれらの変更が自動的に反映され、データの状態を簡単に照会できます。いつでも。
質問:モデルにエラーのあるフィールドのリストが含まれている場合に、エラーの強調表示を実装する最もクリーンな方法は何ですか?