BaseForm (8.3)#
Базовый класс формы.
Создание формы#
Для создания формы в Lexema 8.3 необходимо отнаследовать новый класс от класса BaseForm (или его наследника) и создать в нём статическое свойство template, которое должно возвращать ссылку на шаблон формы. Данное свойство является обязательным.
В большинстве случаев в качестве предков следует использовать один из таких стандартных классов, как Form, Document или Registry.
Привязка данных#
Для того, чтобы при создании формы происходила загрузка данных, необходимо описать в классе статическое свойство binding, которое должно возвращать ссылку на описание модели / запроса (экспериментальный функционал) или на класс особого адаптера данных.
Данные формы должны быть сериализуемы. Наличие в данных объектов с циклическими ссылками недопустимо.
Кэши данных#
Для того, чтобы параллельно с загрузкой основных данных формы происходила загрузка дополнительных коллекций (что применяется, например, для использования т.н. "примитивных лукапов"), следует описать в классе формы статическое свойство dataCaches, которое должно возвращать массив ссылок на описание модели / запроса.
beforeOpen#
Статический метод beforeOpen позволяет написать прикладной код, который будет выполнен перед открытием формы в новой вкладке (не работает для NestedForm).
Метод принимает объект со свойствами:
- services - Сервисы
- actionFlags - Объект, который содержит флаги, определяющие контекст действия, совершаемого с формой.
- isNew - Флаг, обозначающий, что форма используется для создания нового документа
- key - Ключ открываемого маршрута (объект, содержащий имя маршрута и параметры открываемой формы - код, имя)
Метод должен возвращать Deferred. Если Deferred переходит в состояние resolve, то форма будет открыта, если reject, то форма не откроется и пользователю отобразится окно с сообщением (сообщение берется из класса ошибки, которая была передана в метод reject).
Пример
Методы#
closing#
Метод для добавления функционала перед закрытием или обновлением формы.
Пример когда метод возвращает true/false
Пример когда метод возвращает promise
События#
resized#
Вызывается при изменении размера формы.
Входные параметры обработчика:
| параметр | тип | описание |
|---|---|---|
| width | number | ширина окна браузера |
| height | number | высота окна браузера |
destroyed#
Вызывается после уничтожения формы
titleChanged(text)#
Событие смены заголовка формы.
Входные параметры обработчика:
| параметр | тип | описание |
|---|---|---|
| text | string | текст заголовка |
beforeClosed#
Возникает перед закрытием формы.
tabActivated#
Событие срабатывает, когда вкладка (в которой находится форма) становится активной.
| параметр | тип | описание |
|---|---|---|
| args | object | объект со свойствами |
| args.customData | object | кастомные параметры формы |
Примечания
- Если создается новая форма, то событие в этом случае тоже сработает.
- Событие не будет срабатывать для вложенных форм.
- Если в текущей форме перейти на эту же форму, то событие tabActivated не сработает, но customData при этом может измениться. В истории браузера переход по ссылке сохранится.
- При срабатывании события в аргументах всегда будет приходить тот же объет customData, который был передан изначально (ссылки у объектов будут равны), пока в форму не будет явно передан новый объект (при переходе по ссылке объект всегда будет новым). Передать в форму новый объект customData можно с помощью сервиса NavigationService_(8.3) или при переходе по ссылке (см. метод createViewUrl контрола Link).
Если необходимо в событии отслеживать изменение объекта customData, то это необходимо делать вручную.
Пример
Этот пример написан лишь в качестве демонстрации того, как можно сделать проверку изменения объекта customData. В вашем случае проверка может выглядеть иначе.
См. также: DataCache.
Примеры#
См. примеры в статье Form.