Примеры привязок
Этот раздел описывает реальные примеры привязок виджета.
Пример 1. Открытие нового виджета нажатием кнопки
Этот пример показывает, как выполнить действие сервера нажатием кнопки. Наиболее типичным при использовании привязки этого типа является открытие нового виджета, когда кнопка нажимается на любом другом виджете.
Во-первых, поместите компонент Кнопка на вашем виджете. Во-вторых, добавьте привязку к кнопке и настройте эту привязку следующим образом:
- Настройте событие Нажатие кнопки мышки как Активатор привязки, то есть настройте Активатор на
form/button1:mousePressed@
- Настройте его действие Запуск Виджета как цель привязки, то есть настройте Цель на
users.admin.widgets.bindingsDemo:launch!
, гдеusers.admin.widgets.bindingsDemo
- это контекстный путь запуска виджета. - Оставьте Выражение привязки пустым.
Настройка привязки:
Цель |
|
Выражение | |
Активатор |
|
Условие | |
Опции |
|
Возможно также закрыть текущий виджет (тот, что с кнопкой) до выполнения действия. Для настройки этого:
|
Пример 2: Цвет панели привязки по статусу контроллера
Эта привязка окрашивает панель статуса в красный цвет, если от контроллера поступает тревога о перенапряжении. В других случаях панель останется зеленой.
Имейте в виду, что ссылки на выражение и цель используют пути относительного контекста (".
"), чтобы виджет соотносился с множеством подобных контроллеров. Виджет должен быть относительным и действительным для всех устройств типа "контроллер напряжения".
Цель |
|
Выражение |
|
Активатор | |
Условие | |
Опции |
|
Возможно изменить вышеобозначенную привязку, чтобы окрашивать панель в красный цвет, если температура превышает 50 градусов:
|
Пример 3: Компонент регулятора привязки для установки заданного значения контроллера
Эта пара привязок меняет заданное значение контроллера (например, контроллера температуры) как только смещается регулятор.
Первая привязка используется для чтения текущего заданного значения из контроллера и инициализации регулятора:
Цель |
|
Выражение |
|
Активатор | |
Условие | |
Опции |
|
Вторая привязка записывает новые заданные значения в контроллер, как только смещается регулятор:
Цель |
|
Выражение |
|
Активатор | |
Условие | |
Опции |
|
Пример 4: Редактор таблицы привязок для результатов запроса
Эта привязка выполняет запрос сервера, чей текст содержится в текстовом поле queryText
и помещает результаты запроса в компонент Редактор таблицы данных с названием results
.
Запрос выполняется вызовом executeQuery
корневого контекста сервера. Операция выполняется при помощи клика кнопки execute
.
Обратите внимание, что первый параметр функции executeQuery
помещается в одинарные кавычки, чтобы система обрабатывала его как выражение.
Цель |
|
Выражение |
|
Активатор |
|
Условие | |
Опции |
|
Возможно использовать альтернативный синтаксис для вышеобозначенных выражений привязки:
Это выражение функционирует так же, как вышеобозначенное. Однако оно задействует функцию языка выражений |
Пример 5: Вызов функции устройства
Этот пример объясняет, как произвести вызов функции устройства или сервера из виджета при условии, что у нас есть устройство, поддерживающее операцию multiply
с двумя числовыми аргументами. Можно вызвать эту операцию при помощи нажатия кнопки calculate
, вводя числа в два текстовых поля (argument1
и argument2
).
Первый способ: Вызов функции из цели привязки виджета
В этом случае наша цель привязки указывает на функцию, а ее выражение возвращает предварительно подготовленную таблицу параметров:
Цель |
|
Выражение |
|
Активатор |
|
Условие | |
Опции |
|
Имейте в виду, что мы используем путь относительного контекста (".
") в цели, чтобы сделать расчет виджета совместимым со многими агентами вычисления. Чтобы использовать его всего лишь с одним агентом, определите абсолютный путь, например users.my_user.devices.my_agent.
В этом примере результат вычисления, возвращенный множеством операций, исключается. Но что если мы захотим поместить его в другой компонент виджета (такой как метка)? Вот решение:
Второй способ: Вызов функции из выражения привязки виджета
В этом случае наше выражение привязки вызывает функцию и возвращает ее выход (Таблицу данных). Действительный результат вычисления (числовое поле result
) извлекается из таблицы при помощи функции cell()
. Этот результат записывается в метку result
:
Цель |
|
Выражение |
|
Активатор |
|
Условие | |
Опции |
|
Имейте в виду, что используется относительный путь контекста устройства (возвращаемый функцией dc()
). Чтобы использовать абсолютный путь контекста, поменяйте dc()
на полный путь устройства, например users.my_user.devices.my_agent
.
Существует еще один (более компактный) стиль записи вышеобозначенного выражения привязки для получения точно такого же результата. Этот стиль использует ссылку функции вместо функции языка выражений
|