Для правильной работы скрипта в части создания виртуального устройства через:
defineVirtualDevice('status-info', {title: 'Информация', cells: {}});
Хочу предварительно проверить существует ли такое виртуальное/реальное устройство.
При попытке проверки через конструкцию:
log.info(getDevice('status-info').getId() ? 'exists' : 'not exists');
Возникает ошибка:
Error in getting device: Device with given ID doesn’t exist
Вопрос: как правильно осуществить проверку? (сижу на релизе wb-2207)
Добрый день.
Описано в документации.
Пример
//04_24_test_02.js
var vdName = "system";
log.info("проверим наличие");
if (!getDevice(vdName)) {
log.info("Устройства "+vdName+" нет")
} else {
log.info("Устройство "+vdName+" есть.")
}
И да, при попытке получить отсутствующее устройство возникает исключение.
Спасибо за пример, но данное применение вызвывает ошибку в самом скрипте при сохранении файла. Лучше и надежнее заключить все в try..catch
:
try {
var check = getDevice('status-info');
}
finally {
if (!check) defineVirtualDevice('status-info', {title: 'Информация', cells: {}});
}
Для более удобной работы можно использовать использовать следующую конструкцию, которая создаст вирт. устройство если его нет, или будет сразу его использовать:
var device = getDevice('status-info') || defineVirtualDevice('status-info', {title: 'Информация', cells: {}});
device.addControl('active', {type: 'switch', value: false, readonly: true});
Функцию makeNewVirtualControl отсюда посмотрите - уже готовая реализация, как раз с правильной проверкой.