Примеры привязок

Этот раздел описывает реальные примеры привязок виджета.

Пример 1. Открытие нового виджета нажатием кнопки

Этот пример показывает, как выполнить действие сервера нажатием кнопки. Наиболее типичным при использовании привязки этого типа является открытие нового виджета, когда кнопка нажимается на любом другом виджете.

Во-первых, поместите компонент Кнопка на вашем виджете. Во-вторых, добавьте привязку к кнопке и настройте эту привязку следующим образом:

  • Настройте событие Нажатие кнопки мышки как Активатор привязки, то есть настройте Активатор на form/button1:mousePressed@
  • Настройте его действие Запуск Виджета как цель привязки, то есть настройте Цель на users.admin.widgets.bindingsDemo:launch!, где users.admin.widgets.bindingsDemo - это контекстный путь запуска виджета.
  • Оставьте Выражение привязки пустым.

Настройка привязки:

Цель

users.admin.widgets.bindingsDemo:launch!

Выражение


Активатор

form/button1:mousePressed@

Условие


Опции

При событии

Возможно также закрыть текущий виджет (тот, что с кнопкой) до выполнения действия. Для настройки этого:

  • Откройте свойство Операции кнопки
  • Добавьте запись с операцией Закрыть

Пример 2: Цвет панели привязки по статусу контроллера

Эта привязка окрашивает панель статуса в красный цвет, если от контроллера поступает тревога о перенапряжении. В других случаях панель останется зеленой.

Имейте в виду, что ссылки на выражение и цель используют пути относительного контекста ("."), чтобы виджет соотносился с множеством подобных контроллеров. Виджет должен быть относительным и действительным для всех устройств типа "контроллер напряжения".

Цель

form/voltageAlertPanel:background

Выражение

{.:voltageAlert$voltageAlert} ? color(255, 0, 0) : color(0, 255, 0)

Активатор


Условие


Опции

При запуске, при событии

Возможно изменить вышеобозначенную привязку, чтобы окрашивать панель в красный цвет, если температура превышает 50 градусов:

({.:voltage$voltage} > 50) ? color(255, 0, 0) : color(0, 255, 0)

Пример 3: Компонент регулятора привязки для установки заданного значения контроллера

Эта пара привязок меняет заданное значение контроллера (например, контроллера температуры) как только смещается регулятор.

Первая привязка используется для чтения текущего заданного значения из контроллера и инициализации регулятора:

Цель

form/slider1:value

Выражение

{.:currentTemperature$temperatureCelsius}

Активатор


Условие


Опции

При запуске

Вторая привязка записывает новые заданные значения в контроллер, как только смещается регулятор:

Цель

.:currentTemperature$temperatureCelsius

Выражение

{form/slider1:value}

Активатор


Условие


Опции

При событии

Пример 4: Редактор таблицы привязок для результатов запроса

Эта привязка выполняет запрос сервера, чей текст содержится в текстовом поле queryText и помещает результаты запроса в компонент Редактор таблицы данных с названием results.

Запрос выполняется вызовом executeQuery корневого контекста сервера. Операция выполняется при помощи клика кнопки execute .

Обратите внимание, что первый параметр функции executeQuery помещается в одинарные кавычки, чтобы система обрабатывала его как выражение.

Цель

form/result:dataTable

Выражение

{:executeQuery('{form/queryText:text}')}

Активатор

form/execute:click@

Условие


Опции

При событии

Возможно использовать альтернативный синтаксис для вышеобозначенных выражений привязки:

callFunction("", "executeQuery", {form/query:text})

Это выражение функционирует так же, как вышеобозначенное. Однако оно задействует функцию языка выражений callFunction(), чтобы вызвать функцию контекста сервера, ясно определяя путь контекста, имя функции и ее параметры.

Пример 5: Вызов функции устройства

Этот пример объясняет, как произвести вызов функции устройства или сервера из виджета при условии, что у нас есть устройство, поддерживающее операцию multiply с двумя числовыми аргументами. Можно вызвать эту операцию при помощи нажатия кнопки calculate, вводя числа в два текстовых поля (argument1 и argument2).

Первый способ: Вызов функции из цели привязки виджета

В этом случае наша цель привязки указывает на функцию, а ее выражение возвращает предварительно подготовленную таблицу параметров:

Цель

.:multiply()

Выражение

table(functionInputFormat(), {form/argument1:text}, {form/argument1:text})

Активатор

form/calculate:click@

Условие


Опции

При событии

Имейте в виду, что мы используем путь относительного контекста (".") в цели, чтобы сделать расчет виджета совместимым со многими агентами вычисления. Чтобы использовать его всего лишь с одним агентом, определите абсолютный путь, например users.my_user.devices.my_agent.

В этом примере результат вычисления, возвращенный множеством операций, исключается. Но что если мы захотим поместить его в другой компонент виджета (такой как метка)? Вот решение:

Второй способ: Вызов функции из выражения привязки виджета

В этом случае наше выражение привязки вызывает функцию и возвращает ее выход (Таблицу данных). Действительный результат вычисления (числовое поле result) извлекается из таблицы при помощи функции cell(). Этот результат записывается в метку result:

Цель

form/result:text

Выражение

cell(callFunction(dc(), "multiply", {form/argument1:text}, {form/argument1:text}), "result")

Активатор

form/calculate:click@

Условие


Опции

При событии

Имейте в виду, что используется относительный путь контекста устройства (возвращаемый функцией dc()). Чтобы использовать абсолютный путь контекста, поменяйте dc() на полный путь устройства, например users.my_user.devices.my_agent.

Существует еще один (более компактный) стиль записи вышеобозначенного выражения привязки для получения точно такого же результата.

Этот стиль использует ссылку функции вместо функции языка выражений callFunction():

{.:multiply('{form/argument1:text}', '{form/argument2:text}')$result}