Node-RED:Создание нод/Свойства ноды: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Node-RED/Панель перехода}} | {{Node-RED/Панель перехода}} | ||
{{Перевод от Сubewriter}} | {{Перевод от Сubewriter}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Свойства ноды<ref>[https://nodered.org/docs/creating-nodes/properties nodered.org - Node properties]</ref>= | =Свойства ноды<ref>[https://nodered.org/docs/creating-nodes/properties nodered.org - Node properties]</ref>= | ||
Строка 14: | Строка 11: | ||
'''1.''' Добавляем в объект '''«defaults»''' новую запись: | '''1.''' Добавляем в объект '''«defaults»''' новую запись: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
defaults: { | defaults: { | ||
name: {value:""}, | name: {value:""}, | ||
Строка 25: | Строка 22: | ||
'''2.''' Добавляем соответствующую надпись к [[HTML-шаблон]] для меню редактирования ноды: | '''2.''' Добавляем соответствующую надпись к [[HTML-шаблон]] для меню редактирования ноды: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
<div class="form-row"> | <div class="form-row"> | ||
<label for="node-input-prefix"><i class="icon-tag"></i> Prefix</label> | <label for="node-input-prefix"><i class="icon-tag"></i> Prefix</label> | ||
Строка 36: | Строка 33: | ||
'''3.''' Используем свойство в ноде: | '''3.''' Используем свойство в ноде: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
function LowerCaseNode(config) { | function LowerCaseNode(config) { | ||
RED.nodes.createNode(this,config); | RED.nodes.createNode(this,config); | ||
Строка 80: | Строка 77: | ||
В примере ниже демонстрируется, как можно применить обе этих проверяющих функции: | В примере ниже демонстрируется, как можно применить обе этих проверяющих функции: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
defaults: { | defaults: { | ||
minimumLength: { value:0, validate:RED.validators.number() }, | minimumLength: { value:0, validate:RED.validators.number() }, | ||
Строка 119: | Строка 116: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Node-RED библиотеки}} | |||
{{Навигационная таблица/Телепорт}} |
Текущая версия от 10:15, 9 сентября 2023
Свойства ноды[1]
Свойства ноды задаются объектом «defaults» в HTML-файле ноды. Эти свойства передаются функции-конструктору ноды, когда в среде выполнения был создан экземпляр ноды.
В примере из статьи «Создание первой ноды» у ноды было только одной свойство – «name». В этой статье мы добавим в ноду еще одно свойство – «prefix».
1. Добавляем в объект «defaults» новую запись:
defaults: {
name: {value:""},
prefix: {value:""}
},
В этой записи вместо «value» должно быть какое-то значение, которое будет использоваться по умолчанию, когда новая нода этого типа будет перетянута в рабочую область редактора.
2. Добавляем соответствующую надпись к HTML-шаблон для меню редактирования ноды:
<div class="form-row">
<label for="node-input-prefix"><i class="icon-tag"></i> Prefix</label>
<input type="text" id="node-input-prefix">
</div>
В этом шаблоне должен быть элемент <input> с атрибутом <id>, заданным на «node-input-<название_свойства>».
3. Используем свойство в ноде:
function LowerCaseNode(config) {
RED.nodes.createNode(this,config);
this.prefix = config.prefix;
var node = this;
this.on('input', function(msg) {
msg.payload = node.prefix + msg.payload.toLowerCase();
node.send(msg);
});
}
Настройки свойства
У записей в объекте «defaults» могут быть следующие атрибуты:
- «value» (любой тип данных) – значение свойства по умолчанию.
- «required» (булево значение) – задает то, является ли это свойство обязательным. Если задать здесь «true» и если в этом свойстве будет «null» или пустая строка, значение в этом свойстве будет признано некорректным. Это опциональная настройка.
- «validate» (функция) – функция, которую можно использовать для проверки значения в свойстве. Это опциональная настройка.
- «type» (строка) – если это свойство является указателем на конфигурационную ноду, в этой настройке задается тип этой ноды. Это опциональная настройка.
Зарезервированные названия для свойств
Есть несколько зарезервированных названий, которые не следует использовать для названий свойств. Вот они:
- type, x, y, z, wires, outputs
Впрочем, свойство «outputs» можно вписать в массив «defaults», если вам нужно сделать редактируемым количество выходных портов ноды. Пример того, как это работает – нода «Function».
Проверка свойства
Редактор пытается проверить все свойства, чтобы предупредить пользователя, если в каких-то свойствах будут некорректные значения.
Если вам нужно указать, что значение какого-либо свойства не должно быть пустым или что в нем не должно быть «null», воспользуйтесь атрибутом «required».
Если вам нужна более прицельна проверка, можно воспользоваться атрибутом «validate», где можно задать функцию, проверяющую корректность значения в свойстве. Проверяемое значение «скармливается» этой функции, а она должна вернуть «true» или «false». Она вызывается внутри контекста ноды, поэтому для доступа к другим свойствам ноды можно использовать объект «this». Это позволяет сделать проверку с использованием других свойств и их значений. При редактировании ноды объект «this» отражает текущие настройки ноды, но не значение, в данный момент находящееся в элементе формы. Проверяющая функция должна попытаться получить доступ к значению в элементе формы, а объект «this» использовать в качестве запасного варианта.
Есть несколько распространенных проверяющих функций:
- RED.validators.number() – проверяет, является ли значение числом
- RED.validators.regex(re) – проверяет, соответствует ли значение заданному регулярному выражению
Оба метода – и с помощью атрибута «required», и с помощью атрибута «validate» – отражаются в UI редактора одинаково. Если значения нет или оно некорректно, в ноде активируется маркер недостающего компонента, а соответствующий элемент ввода данных обводится красной линией.
В примере ниже демонстрируется, как можно применить обе этих проверяющих функции:
defaults: {
minimumLength: { value:0, validate:RED.validators.number() },
lowerCaseOnly: {value:"", validate:RED.validators.regex(/[a-z]+/) },
custom: { value:"", validate:function(v) {
var minimumLength=$("#node-input-minimumLength").length?$("#node-input-minimumLength").val():this.minimumLength;
return v.length > minimumLength
} }
},
Обратите внимание, что свойство «custom» корректно только, если размер его значения больше текущего значения в свойстве «minimumLength» или значения в элементе формы «minimumLength».
Формирование меню редактирования ноды
Когда пользователь открывает меню редактирования ноды, редактор заполняет его HTML-шаблоном соответствующей ноды.
Он ищет для каждого свойства в массиве «defaults» соответствующий элемент <input> с атрибутом «id», где хранится соответствующее значение «node-input-<название_свойства>». Этот элемент ввода данных затем автоматически заполняется текущим значением этого свойства. Когда пользователь нажимает на кнопку «Done», в свойство записывается значение, которое в тот момент находилось в элементе ввода данных.
Типом элемента <input> может быть либо «text» (для строковых/числовых свойств), либо «checkbox» (для свойств с булевыми значениями). Также можно воспользоваться элементом <select>, если пользователю нужно будет выбрать один из ограниченного количества вариантов.
Кастомизация меню редактирования ноды
Обычно меню редактирования ноды вполне хватает тех элементов, что заданы в нем по умолчанию, но иногда для него нужно задать другое поведение – отвечающее специфике ноды. К примеру, в случае если свойство нельзя правильно отредактировать при помощи простых элементов <input> или <select> или если меню редактирования должно вести себя по-разному в зависимости от выбранных настроек.
Ниже – функции, которые можно использовать для кастомизации поведения меню редактирования ноды. Они задаются в HTML-файле ноды.
- oneditprepare – вызывается сразу перед показом меню редактирования ноды
- oneditsave – вызывается при нажатии на кнопку «Done» в меню редактирования ноды
- oneditcancel – вызывается в при нажатии на кнопку «Cancel» в меню редактирования ноды
- oneditdelete – вызывается при нажатии на кнопку «Delete» в меню редактирования конфигурационной ноды
- oneditresize – вызывается при изменении размера меню редактирования ноды
К примеру, если нода «Inject» настроена на повторную отправку сообщений (пункт «Repeat»), она будет хранить это свойство как строку в cron-формате («1,2 * * * *»). В этой ноде задана функция «oneditprepare», способная пропарсить эту строку и показать более дружелюбный к пользователю графический интерфейс. В ней также есть функция «oneditsave», которая группирует настройки, выбранные пользователем, обратно в соответствующую cron-строку.
См.также
Внешние ссылки