При взаимодействии пользователей и веб-приложения возникают множество разнообразных событий - авторизация, создание и удаление объектов, загрузка файлов и так далее. Реакция приложения на события в целом, определяет его функциональность.
В декларативном фреймворке Evado управление обработкой событий осуществляется в модуле «Администрирование» в разделе «События».
Подробнее о декларативной разработке можно прочитать в статье «Создание приложения без программирования».
Слушатели
Для того, чтобы приложение реагировало на событие, необходимо создать слушателя, в котором определены идентификатор события и действие (обработчик) при его наступлении.
События задаются как строковые идентификаторы. Если в названии события используется точка, то формируется иерархия подключения. Например, слушатель события meta.base.create.myClass (см. ниже служебные события) получит оповещение при создании объекта класса myClass. Слушатель же meta.base.create получит события meta.base.create.myClass, meta.base.create.myClass2 и так далее, то есть при создании объекта любого класса.
Для слушателя можно указать сразу несколько событий. При возникновении любого из них будут вызваны все указанные обработчики.
Обработчики
Событие - это спусковой механизм для начала определенных действий. Реакция на событие представлена обработчиками, а также уведомлениями и задачами (см. ниже). Обработчик описывает конфигурацию JavaScript класса, который содержит метод execute, вызываемый при наступлении события. Пример обработчика из демо-приложения фреймворка Evado.
В метод execute передаются данные, структура которых зависит от типа события. Например, при входе в систему передаётся идентификатор пользователя, а при неудачной попытке входа - IP и логин.
Во фреймворке Evado имеется обработчик MetadataClassInstantiation, который используется для создания объекта заданного класса. Например, при регистрации пользователя в системе нужно создать объект класса метаданных, который хранит данные пользователя для приложения. Пример можно посмотреть в приложении «Социальная сеть» - описание обработчиков событий и слушателей.
Уведомления и задачи
Кроме обработчиков, в слушателе можно определить уведомления и задачи (на отдельных вкладках), которые, фактически, тоже являются обработчиками, но с предустановленным JavaScript классом. В первом случае, при наступлении события, создаются уведомления для пользователей. Во втором, выполняются указанные задачи.
Задачи были рассмотрены в предыдущей статье - создание запланированных действий без участия пользователей. Стартовым сигналом для задачи служит наступление заданной даты. Это является частным случаем обработки событий.
Служебные события
В системе имеется несколько заранее определенных категорий событий. Первая категория - это события авторизации пользователя:
- auth.login - вход в систему.
- auth.logout - выход из системы.
- auth.fail - неудачная попытка входа в систему.
- auth.register - регистрация нового пользователя.
- auth.changePassword - изменение пароля.
- auth.createVerification - создание запроса на подтверждение электронного алреса.
- auth.verify - электронный адрес подтвержден.
Вторая категория - это события изменения объектов, определенных метаданными приложения. Они начинаются с префикса meta, затем следуют название модели метаданных, само действие, вызвавшее событие, и кодовое имя класса:
- meta.base.create.className- создание нового объекта класса.
- meta.base.update.className - модификация объекта класса.
- meta.base.delete.className - удаление объекта класса.
- meta.base.transit.className - переход объекта класса в новое состояние.
- meta.base.transit.className.transitionName - определенный переход объекта класса в новое состояние.
Вызов события
Обработчики вызываются только при наступлении заданного события. Но для удобства отладки произвольное событие можно запустить прямо из списка слушателей. Кроме обязательного названия события можно указать и дополнительные параметры, которые передадутся в обработчик.
При создании дополнительных компонентов, непосредственно в коде приложения, событие можно вызывать явно через метод emit модуля. Пример реализации смотрите в приложении «Сеть такси».
Заключение
Хотя в большинстве случаев декларативной разработки достаточно средств предлагаемых через веб-интерфейс, однако слушатели и обработчики событий позволяют легко расширить текущий функционал под любые требования. Это продвинутый уровень разработки приложения на декларативном фреймворке Evado.
Демонстрационное приложение Evado можно скачать из открытого хранилища и запустить в Docker или в окружении Node.js и MongoDB.