Определите правило проверки нокаута, которое принимает наблюдаемый параметр, используя typescript

#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 как функцию (не значение), поэтому вы можете оценивать ее значение при каждом вызове проверки.