Менеджер темы
Менеджер темы — глобальный объект, который отслеживает состояния и события темы. Он позволяет выполнять дополнительные действия после возникновения событий или изменений состояния. Например, собирать информацию о действиях клиента в теме для дальнейшей аналитики.
Настройки из статьи применимы, если у вас у установлена официальная тема BILLmanager. Подробнее о том, как создать свою тему, см. статью Создание темы .
Инициализация менеджера
Объект менеджера доступен в глобальном объекте
window
под названием ISPDragonManager. Этот объект не становится доступным мгновенно. Чтобы дождаться его создания, рекомендуется отслеживать событие ISPDragonManagerLoaded, которое срабатывает при готовности объекта менеджера. В данных события ISPDragonManagerLoaded содержится объект менеджера.
Чтобы получить объект менеджера, используйте шаблон:
События
Менеджер позволяет отслеживать общие события, которые происходят в теме:
- http-response — получение ответа на запрос;
- action — выполнение действия. Например, нажатие на кнопку;
- form-submit — успешная отправка формы;
- form-view-init — инициализация формы;
- form-destroy — закрытие формы;
- form-wizard — переход на wizard (мастер) или уход с него.
Тип события http-response
Происходит, когда HTTP-ответ приходит от сервера.
Объект события включает следующие свойства:
Название свойства | Описание | Значения |
---|---|---|
response | ответ от сервера | объект |
requestParams | параметры запроса, на который пришёл ответ от сервера | объект |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Тип события action
Происходит при внутренних событиях темы:
- нажатие на кнопку;
- нажатие на внутреннюю ссылку, т.е. ссылку с атрибутом
@internal="yes"
.
В зависимости от типа события, его объекты содержат свойства:
Объект события "Нажатие на кнопку"
Название свойства | Описание | Значения |
---|---|---|
actionType | тип действия, выполненного пользователем | buttonClick |
contextFunc | имя функции активной вкладки платформы, на которой была нажата кнопка | строка |
name | имя нажатой кнопки. Соответствует атрибуту кнопки @name | строка |
type | тип нажатой кнопки. Соответствует атрибуту кнопки @type | строка |
func | имя функции нажатой кнопки. Соответствует атрибуту кнопки @func | строка или undefined |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Объект события "Нажатие на внутреннюю ссылку"
Название свойства | Описание | Значения |
---|---|---|
actionType | тип действия, выполненного пользователем | internalLink |
contextFunc | имя функции активной вкладки платформы, на которой была нажата ссылка | строка |
params | объект, в котором содержатся параметры внутренней ссылки, заданные в атрибуте ссылки @internal | объект |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Тип события form-submit
Происходит при успешной отправке формы. Если форма не прошла валидацию, событие не произойдет.
Название свойства | Описание | Значения |
---|---|---|
func | имя функции, на которую была отправлена форма | строка |
params | параметры запроса, с которыми произошла отправка формы | объект |
response | ответ от сервера | объект |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Тип события form-view-init
Происходит при первичной инициализации формы. После этого события можно взаимодействовать с DOM-элементами формы.
Если внутри одной формы изменяется объект doc, событие form-view-init
произойдёт повторно. Объект события будет содержать новый объект formGroup
и новое свойство contextFunc
.
Название свойства | Описание | Значения |
---|---|---|
formId | id инициализированной формы | строка |
contextFunc | имя функции формы | строка |
formGroup | объект FormGroup инициализированной формы | FormGroup |
formElement | HTML-элемент инициализированной формы | HTMLFormElement |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Тип события form-destroy
Происходит при закрытии формы.
Название свойства | Описание | Значения |
---|---|---|
formId | id закрытой формы | строка |
contextFunc | имя функции формы | строка |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Тип события form-wizard
Происходит, когда пользователь входит на Форму-мастер (wizard) или покидает её после успешной отправки формы на последнем шаге.
Объект события "Открытие первого шага wizard"
Название свойства | Описание | Значения |
---|---|---|
type | тип события | start |
func | имя функции первого шага wizard | строка |
params | параметры запроса, с которыми был открыт первый шаг wizard | объект |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Объект события "Успешная отправка формы на последнем шаге wizard"
Название свойства | Описание | Значения |
---|---|---|
type | тип события | end |
func | имя функции, на которую была отправлена форма | строка |
params | параметры запроса, с которыми была отправлена форма | объект |
activeDoc | объект, соответствующий корневому тегу doc активной вкладки платформы. Подробнее см. статью Создание темы | объект |
activeContextId | id текущего активного контекста | строка |
Методы работы с событиями
Ниже перечислены методы объекта менеджера, которые позволяют работать с событиями темы.
addListener(eventName, callback) 
Позволяет задать функцию, которая будет выполняться при возникновении события, указанного в первом аргументе.
Аргумент | Описание |
---|---|
eventName | строка с названием события, при котором должна выполниться переданная функция |
callback | функция, вызываемая каждый раз при возникновении события с именем, указанным в |
Функция возвращает undefined
.
removeListener(eventName, callback) 
Удаляет переданную функцию из обработчиков события с именем, указанным в eventName
. После этого функция больше не будет вызываться при возникновении события с таким именем.
Аргумент | Описание |
---|---|
eventName | строка с названием события, с которого нужно удалить функцию |
callback | функция, которую нужно удалить из обработчиков события, указанного в |
Функция возвращает undefined
.
listenToEvent$(eventName) 
Позволяет получить объект класса Observable
, который срабатывает при возникновении события с именем, указанным в eventName
.
Аргумент | Описание |
---|---|
eventName | строка с названием события, за которым нужно следить |
Функция возвращает объект класса Observable
, который отправляет объект события.
Примеры использования
Приведённые примеры будут выполнены в том случае, если существует глобальный объект менеджера (подробнее см. раздел "Инициализация менеджера").
Ниже приведён пример добавления и удаления обработчика события http-response
:
В примере ниже приведена подписка на объект Observable
события action
:
Состояния
Менеджер позволяет получать состояния темы и их изменения:
- active-doc — тег doc активной вкладки платформы;
- user-real-level — уровень пользователя в панели;
- active-context-id — id текущего активного контекста.
Состояние active-doc 
Объект, соответствующий корневому тегу doc активной вкладки платформы.
Состояние user-real-level
Текущий уровень пользователя представлен целым числом. Соответствует атрибуту @level
из первого элемента doc.path
. Таким образом определяется уровень корневого пользователя.
Состояние active-context-id 
Строка, соответствующая id
текущего активного контекста. Например, id активной вкладки. Позволяет однозначно различать элементы на странице, если, например, открыто несколько одинаковых вкладок.
Методы работы с состоянием
Ниже перечислены методы объекта менеджера, которые позволяют работать с состояниями темы.
getState(stateName) 
Позволяет синхронно получить текущее значение состояния, указанного в stateName
.
Аргумент | Описание |
---|---|
stateName | строка с названием состояния, которое нужно получить |
Функция возвращает значение состояния.
addWatcher(stateName, watcher) 
Позволяет добавить функцию, вызываемую сразу после её добавления с текущим значением состояния, а также при каждом последующем изменении этого значения.
Аргумент | Описание |
---|---|
stateName | строка с названием состояния, за которым нужно следить |
watcher | функция, принимающая первым аргументом значение состояния. Она будет вызвана сразу после вызова метода |
Функция возвращает undefined
.
removeWatcher(stateName, watcher)
Удаляет функцию слежения за изменением значения состояния с именем, указанным в stateName
.
Аргумент | Описание |
---|---|
stateName | строка с названием состояния, с которого нужно удалить функцию |
watcher | функция, которую нужно удалить из слушателей события с именем, указанным в |
Функция возвращает undefined
.
watchForState$(stateName, options?)
Позволяет получить объект класса Observable
, который будет срабатывать при изменении значения состояния с именем, указанным в stateName
. При подписке этот Observable
сразу отправит текущее значение состояния. Затем он будет возвращать значение состояния при каждом его изменении.
Аргумент | Описание |
---|---|
stateName | строка с названием состояния, за которым нужно следить |
options | объект с дополнительными опциями для настройки объекта класса |
Функция возвращает объект класса Observable
, который отправляет значение состояния.
Примеры использования
Приведённые примеры будут выполнены в том случае, если существует глобальный объект менеджера (подробнее см. раздел "Инициализация менеджера").
В примере ниже приведено синхронное получение уровня пользователя:
В примере ниже показано, как добавить и удалить слушателя состояния:
В примере ниже показано, как подписаться на объект Observable
состояния user-real-level
:
При установке значения опции skipFirst: true
, поток будет отправлять значения состояния только при его изменении и не будет отправлять значение сразу после подписки на него: