こんにちは、ノックアウト検証プラグインを使用して、監視可能な配列の各要素に適用されるカスタム バリデーターを作成する必要があります。サーバーに投稿すると、オブジェクトの構造は次のようになります。
var viewModel = {
evaluationFormDataContract: {
studentAssignmentInstanceId: value,
evaluationType: value,
categories: array[
CategoriesOnEvaluationDataContract1 = {
memo: value,
categoryId: value,
title: value,
// Fields needed for validation
hasMemo: value,
memoIsMandatory: value
questions: array[
QuestionsOnEvalCategoryDataContract1 = {
memo: value,
grade: value,
hasGrade: value,
hasMemo: value,
showOnlyMemo: value
},
QuestionsOnEvalCategoryDataContract2 = {
memo: value,
grade: value,
hasGrade: value,
hasMemo: value,
showOnlyMemo: value
}]
},
CategoriesOnEvaluationDataContract2 = {
memo: value,
categoryId: value,
title: value,
// Fields needed for validation
hasMemo: value,
memoIsMandatory: value
questions: array[
QuestionsOnEvalCategoryDataContract1 = {
memo: value,
grade: value,
hasGrade: value,
hasMemo: value,
showOnlyMemo: value
},
QuestionsOnEvalCategoryDataContract2 = {
memo: value,
grade: value,
hasGrade: value,
hasMemo: value,
showOnlyMemo: value
},
QuestionsOnEvalCategoryDataContract3 = {
memo: value,
grade: value,
hasGrade: value,
hasMemo: value,
showOnlyMemo: value
}]
}, ]
}
}
ここで、検証は 2 つのネストされた配列にのみ適用する必要があり、いくつかのプロパティに基づいて実行されます。
最初の検証は、categories 配列の各オブジェクトに対して実行する必要があり、メモが必要な場合は hasMemo と memoIsMandatory かどうかを確認します。
2 番目の検証は、質問配列の各オブジェクトに対して実行され、hasGrade が必要なケースであるかどうかを確認します。
最後の検証は hasMemo と showOnlyMemo で行われ、質問オブジェクトのメモ値に使用されます。
検証プラグインのドキュメントを読んで、単純なオブザーバブルを拡張する方法を見つけました.Witchは、次のように行われるようです:
ko.validation.rules['mustEqual'] = {
validator: function (val, otherVal) {
return val === otherVal;
},
message: 'The field must equal {0}'
};
しかし、これが私の viwmodel の構造に対してうまくいくとは思いません。