Blue Flower

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

Допустим, у нас есть модуль xpr_module, который получает температуру в градусах цельсия и устанавливает её на компонент стандартного виджета (пусть xwcLabel). Нам нужно, чтобы этот компонент отображал значение в градусах цельсия и фарангейта.

Настройки компонента будут такие:

 

С текущими настройками, если данные с датчика получены, то на компоненте будет надпись "В доме " и полученная температура температура в градусах Цельсия. Сделаем, чтобы отображалась ещё и в Фаренгейтах.

Для этого, создадим новый скрипт. Краткое описание функций скриптов есть в документации к программе. Открываем блокнот, и пишем в нем:

function componentSetValueHandler(name, value, senderIsSeter) {
    return value;
};

Это функция-перехватчик. Когда кто-то устанавливает значение компоненту, вызывается эта функция. name - это название компонента (у виджета, к которому подключается скрипт, их может быть несколько), value - переданное значение. После вызова функции на компонент будет установлено то значение, которое вернет функция. В примере просто возвращается value, поэтому, будет установлено то значение, которое было передано. Теперь немного переделаем функцию:

function componentSetValueHandler(name, value, senderIsSeter) {
    if (name == "t_home") {    // если это компонент t_home
        var    fc = (value*(9/5))+32;    // вычисляем температуру в Фаренгейтах и записываем в переменную
        return value + "°C, " + fc + "°F";    // возвращаем строку со значением температеру в градусах Цельсия и Фаренгейта
    }
   
    return value;    // если любой другой компонент, просто возвращаем его значение
};

Вот что отображается на компоненте: