Валідатори - механізм, що забезпечує перевірку достовірності моделі. Зверніть увагу, что валідатори, як і все решта в шаблонах, пов'язуються з даними, а не з користувацьким інтерфейсом. Елементи керування самі відслідковують коректність даних і виводять відповідні повідомлення про помилки.
Об'єкт, що описує валідатори, являє собою звичайний об`єкт JavaScript. Імена властивостей являють
собою шлях до елементу даних в моделі (до того об'єкту, перевірку якого потрібно виконати). Якщо в шляху до
даних зустрічається масив, то відповідна властивість відмічається суфіксом []
. Наприклад,
валідатор до властивості Sum
рядку документу буде мати ім'я Document.Rows[].Sum
.
Значенням валідатора може бути як один валідатор, так і масив валідаторів. Якщо це масив, то застосовуються всі валідатори з масива.
Кожен валідатор (єдиний, або елемент масива) може бути рядком, функцією, або об'єктом заданної структури. Основним видом валідатора є об'єкт. Решта значень - просто скороченй запис для об'єкта.
valid
- рядок (стандартний валідатор) або функція перевірки.async
- необов'язково. Валідатор є асинхронним (див. нижче).
msg
- повідомлення про помилку. Функція перевірки може повернути рядок, а не булеве значення. У цьому випадку значення
цієї властивості ігнорується.
severity
- серйозність помилки. За замовчуванням - 'error'
. Впливає на зовнішній вигляд повідомлення і
може бути використано в коді.
regExp
- регулярний вираз для стандартного валідатора типу 'regExp'
.
applyIf
- функція, що визначає, чи потрібно застосовувати валідатор.
Якщо значення властивості valid
- рядок, то це стандартний валідатор. Можливі значення:
'notBlank'
- значення не пусте.'email'
- значення являє собою коректну (синтаксично) адресу електронної пошти.
'url'
- значення являє собою коректну (синтаксично) web-адресу.
'isTrue'
- значення точно дорівнює true
.
'regExp'
- значення відповідає регулярному виразу. У цьому випадку повинно бути задано властивість 'regExp'
.
Якщо валідатор - рядок, то це перевірка значення на пустоту. Сам рядок буде повідомленням про помилку. Це еквівалент об'єкта
Якщо валідатор - функція, то це еквівалент об'єкта
valid(elem: IElement, value?: any): boolean | string | Promise;
elem
- елемент, до якого застосовується валідатор.
val
- значення, що перевіряється.
true
- якщо значення коректне. false
- якщо значення некоректне. string
- повідомлення про помилку, якщо значення некоректне. Цей рядок буде заміщувати значення властивості 'msg'
.
Якщо валідатор декларовано як функцію, то ця функція завжди повинна повертати рядок (значення msg
в цьому випадку просто нема).
об`єкт templateValidatorResult
- об'єкт, що визначає повідомлення про помилку (msg
)
і ступінь її серйозності (severity
).
Promise
- для асинхронного валідатора. Проміс повинен повернути булеве значення або рядок.applyIf
applyIf?: (elem: IElement, value?: any): boolean
elem
- елемент, до якого застосовується валідатор.
val
- значення, що перевіряється.
true
- якщо валідатор активний і його потрібно застосувати.
Асинхронні валідатори використовуються у випадку, коли для перевірки коректності потрібно звернутися до серверу. Такий валідатор
відмічається властивістю async: true
.
Функція валідації для асинхронного валідатора повинна повернути Promise
, значенням якого буде або булеве значення,
або рядок (як і у звичайної функції валідації).
Асинхронний валідатор зазвичай використовує метод контролера $asyncValid.
Зверніть увагу! Значення, що повертаються, для асинхронних валідаторів, кешуються для уникнення занадто частих звернень до серверу. Фактично валідатор викликається тільки одного разу при кожній зміні пов'язаних з ними значень.