0

こんにちは、ノックアウト検証プラグインを使用して、監視可能な配列の各要素に適用されるカスタム バリデーターを作成する必要があります。サーバーに投稿すると、オブジェクトの構造は次のようになります。

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 の構造に対してうまくいくとは思いません。

4

1 に答える 1