Runtime
Работа с ресурсами интерфейса, события рабочего процесса, условная видимость элементов и состояние интерфейса.
Runtime отвечает за поведение самого интерфейса во время работы: чтение и запись ресурсов, события
рабочего процесса, условную видимость элементов и общее состояние. Все возможности доступны через
фасад Engine.api.ui и Engine.api.visibility.
Оформление (темы, цвета, языки и переводы) вынесено на отдельную страницу UI.
Ресурсы интерфейса
Ресурсы — это поля, в которые пользователь вводит данные для сценария. К каждому обращаются по имени.
Прочитать значение ресурса
Engine.api.ui.getResource(имя) — возвращает текущее значение ресурса.
const res = Engine.api.ui.getResource('userName');
if (res.success) console.log(res.data);Записать значение в ресурс
Engine.api.ui.setResource(имя, значение) — устанавливает значение ресурса и обновляет
соответствующий элемент интерфейса.
Engine.api.ui.setResource('userName', 'Иван');Получить все ресурсы сразу
Engine.api.ui.getAllResources() — возвращает список всех ресурсов интерфейса с их именами и
текущими значениями.
const res = Engine.api.ui.getAllResources();
res.data.forEach(r => console.log(r.name, '=', r.value));Узнать свойства ресурса
Engine.api.ui.getResourceInfo(имя) — возвращает подробную информацию о ресурсе: значение,
видимость, доступность, обязательность заполнения.
const res = Engine.api.ui.getResourceInfo('apiKey');
console.log(res.data.visible, res.data.disabled);Ресурсы и переменные — это разное
Значения ресурсов интерфейса и переменные выполняющегося сценария хранятся отдельно. Чтобы читать и записывать переменные внутри работающего сценария, используйте Engine.
События рабочего процесса
Интерфейс генерирует события в ключевые моменты работы со сценарием. На них можно подписаться.
| Событие | Когда возникает |
|---|---|
workflow:start | Пользователь запустил сценарий |
workflow:stop | Сценарий остановлен |
workflow:reset | Форма сброшена |
form:submit | Отправлена форма |
state:changed | Изменилось состояние рабочего процесса |
data:updated | Обновились собранные данные |
Подписаться на событие
Engine.api.ui.on(событие, обработчик) — подписывается на событие. В обработчик приходят данные
события.
Engine.api.ui.on('workflow:start', (payload) => {
console.log('Данные формы:', payload.data);
});Отписаться от события
Engine.api.ui.off(событие, обработчик) — отписывается от события.
Отправить собственное событие
Engine.api.ui.emit(событие, данные) — генерирует собственное событие, удобно для обмена
сигналами внутри интерфейса.
Engine.api.ui.emit('myPanel:opened', { tab: 'settings' });
Engine.api.ui.on('myPanel:opened', (d) => console.log(d.tab));Запуск и остановка из кода
Помимо кнопок с data-action, рабочим процессом можно управлять программно:
Engine.api.ui.startWorkflow(); // собрать данные формы и запустить
Engine.api.ui.stopWorkflow(); // остановитьУсловная видимость
Механизм условной видимости показывает или скрывает элементы в зависимости от значений ресурсов. Например, поле «Прокси» появляется, только если включён переключатель «Использовать прокси».
Добавить условие показа элемента
Engine.api.visibility.addCondition(идентификаторЭлемента, условие) — добавляет условие показа
элемента.
Условие — объект: какой ресурс отслеживать, оператор сравнения и значение.
Поддерживаемые операторы: equals, notEquals, in, notIn, contains, notContains,
greaterThan, lessThan, greaterOrEqual, lessOrEqual, empty, notEmpty, checked,
unchecked.
Engine.api.visibility.addCondition('proxyField', {
resourceId: 'useProxy',
operator: 'checked'
});Убрать условие показа
Engine.api.visibility.removeCondition(идентификаторЭлемента) — удаляет условие для элемента.
Посмотреть все условия
Engine.api.visibility.getConditions() — возвращает все заданные условия.
Задать и прочитать значение для условий
Engine.api.visibility.setResourceValue(идентификаторРесурса, значение) и
Engine.api.visibility.getResourceValue(идентификаторРесурса) — задают или читают значение
ресурса, влияющего на видимость (используется механизмом условий).
Пересчитать видимость
Engine.api.visibility.refresh() — принудительно пересчитывает видимость всех элементов.
Полезно после массового изменения значений.
Engine.api.visibility.setResourceValue('useProxy', true);
Engine.api.visibility.refresh();Состояние интерфейса
Получить сводное состояние
Engine.api.ui.getState() — возвращает сводное состояние интерфейса: текущая тема, язык и
значения элементов.
const res = Engine.api.ui.getState();
console.log(res.data.theme, res.data.language);Пересобрать интерфейс
Engine.api.ui.refresh() — пересобирает динамические части интерфейса (подсказки, списки,
видимость). Вызывайте после того, как вручную добавили элементы на страницу.