Kharkiv.js#2 - Валидация данных на клиенте (JavaScript)
Мотивация валидации данных на клиенте, почему валидация мигрирует с сервера на клиент. Простые примеры на Backbone.js и Angular.js, валидация структуры с помощью contract.
данными внутри ПО ‣ Мотивация валидации на клиенте намного сложнее: это UI, время отклика интерфейса, комфорт в разработке, субъективное представление об интерфейсе Tuesday, June 25, 13
рода фреймворков все стало относительно просто: ‣ Валидацию начали аккуратно встраивать на серверных фреймворках (Zend Forms, Struts, Adobe Flex, Django) ‣ На клиенте начали “вручную” создавать довольно навороченные валидации с кошмарным кодом. Tuesday, June 25, 13
из БД (сессии, контент страницы т.п.) ‣ Плохое время отклика - перезагрузки всей страницы ‣ Stateless-природа HTTP вынуждает хранить контекст всей страницы при сложном data- flow Если client-side валидация так хороша - почему от нее отказались? Tuesday, June 25, 13
‣ Все что меняется быстрее 50ms - незаметно ‣ The memory-prediction framework - мозг строит прогноз-ожидание (via Jeff Hawkins) Немного о высоком Tuesday, June 25, 13
есть метод validate, а также при вызове метода set модели можно ловить change:property ‣ Есть плагин backbone.validation, позволяет в декларативном стиле задавать правила Tuesday, June 25, 13
view ‣ Интерактивное отображение ошибок вынуждает писать больше кода ‣ В случае дочерних view сложность кода сильно возрастает (ловить event-ы) Tuesday, June 25, 13
- email, number, regexp. Красота, которая из коробки в html5 ‣ Кастомная валидация имплементится в виде директив, что обеспечивает надежный уровень изоляции ‣ Все валидируется “на лету”, к полям автоматически добавляются соотв. классы в случае ошибки (или ошибок) Tuesday, June 25, 13
‣ ngPattern – проверерка по regexp-у ‣ ngRequired, ngMinlengh, ngMaxlength ‣ ngList – преобразует строку с разделителем в массив (по умолчанию разделитель - запятая) ‣ ngTrim – пробелы в начале и конце строки игнорируются Tuesday, June 25, 13