Node-RED:Создание нод/Свойства ноды

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Свойства ноды[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-строку.

См.также

Внешние ссылки