您好我需要创建一个自定义验证器,该验证器将使用敲除验证插件应用于可观察数组的每个元素。当我将它发布到服务器时,我的对象的结构将如下所示:
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
}]
}, ]
}
}
现在验证将必须仅应用于两个嵌套数组,并且将基于某些属性完成。
必须对类别数组的每个对象进行第一次验证,如果需要,它将检查是否有 hasMemo 和 memoIsMandatory。
将对问题数组的每个对象进行第二次验证,如果需要的话,它将检查是否有 hasGrade。
最后的验证将在 hasMemo 和 showOnlyMemo 上完成,并将用于 questions 对象上的 memo 值。
阅读验证插件的文档后,我发现如何扩展一个简单的 observable .Witch,它似乎是这样完成的:
ko.validation.rules['mustEqual'] = {
validator: function (val, otherVal) {
return val === otherVal;
},
message: 'The field must equal {0}'
};
但我认为这不适用于我的 viwmodel 的结构。如何为我的 observableArrays 中的每个 observable 创建验证器?