#validation #typescript #knockout.js #parameters #null
#проверка #typescript #knockout.js #параметры #null
Вопрос:
Я определил правило проверки следующим образом
ko.validation.rules["studentValidation"] = {
validator: (val: any, params: any) => {
return (this.IsInRequiredRangeForStudent(params.DateOfBirth) amp;amp; val === false);
}
}
IsInRequiredRangeForStudent = (dateOfBirth: any) () => {
//my implementation
}
Вот мой класс ViewModel, где я использую и применяю это правило к наблюдаемому
this.isStudent = ko.observable<boolean>(isStudent).extend({
studentValidation: {
message: "Invalid student option!",
params: {
DateOfBirth: this.dateOfBirth()
}
}
});
В моей реализации правила проверки я всегда получаю параметры.DateOfBirth как null. Что я здесь делаю не так?
Ответ №1:
параметры.DateOfBirth может иметь значение null по нескольким причинам. Но сначала я бы проверил один сценарий. Есть вероятность, что при расширении isStudent observable вы определяете параметры проверки, присваивая значение DateOfBirth observable. Но значение вычисляется в момент присвоения, я не вижу остальной части вашего кода, но весьма возможно, что DateOfBirth observable имеет значение null в момент присвоения параметрам. Итак, каждая дальнейшая проверка параметров.DateOfBirth может возвращать нулевое значение.
Пожалуйста, попробуйте выполнить следующее:
this.isStudent = ko.observable<boolean>(isStudent).extend({
studentValidation: {
message: "Invalid student option!",
params: {
DateOfBirth: this.dateOfBirth
}
}
});
и это:
ko.validation.rules["studentValidation"] = {
validator: (val: any, params: any) => {
return (this.IsInRequiredRangeForStudent(params.DateOfBirth()) amp;amp; val === false);
}
}
Что это меняет? Оно определяет параметры.DateOfBirth как функцию (не значение), поэтому вы можете оценивать ее значение при каждом вызове проверки.