В этом документе мы обсудим, как использовать JavaScript для определения входов и полей (включая метки) в вашем блоке. Если вы не знакомы с этими терминами, см. Анатомия блока, прежде чем продолжить.
Вы также можете определить свои входные данные, поля и соединения в JSON .
Добавить входы
JavaScript API включает метод append для каждого типа ввода :
JavaScript
init: function() {
// ...
this.appendEndRowInput()
.appendField('for each')
.appendField('item')
.appendField(new Blockly.FieldVariable(), 'VAR');
this.appendValueInput('LIST')
.setCheck('Array')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField('in list');
this.appendStatementInput('DO')
.appendField('do');
this.appendDummyInput()
.appendField('end');
}

Каждый метод appendInput может принимать строку идентификатора, которая используется генераторами кода для извлечения кода для блока, подключенного к входу. Генераторы кода редко ссылаются на фиктивные и конечные входы, поэтому обычно нет причин назначать им идентификатор.
JavaScript API также включает в себя универсальный метод appendInput для добавления пользовательских входов . Обратите внимание, что в этом случае идентификатор должен быть передан непосредственно в конструктор вашего пользовательского входа.
JavaScript
init: function() {
// ...
this.appendInput(new MyCustomInput('INPUT_NAME'))
.appendField('an example label')
}
Все методы appendInput (как общие, так и не общие) возвращают объект ввода, чтобы их можно было дополнительно настроить с помощью цепочки методов. Для настройки входов используются три встроенных метода.
Добавить поля
После создания и добавления ввода в блок с помощью appendInput можно по желанию добавить любое количество полей к вводу. Эти поля часто используются в качестве меток для описания того, для чего предназначен каждый ввод.
JavaScript
init: function() {
// ...
this.appendDummyInput()
.appendField('hello');
}

Простейшее поле — метка. Соглашение Blockly заключается в использовании всего текста в нижнем регистре, за исключением имен собственных (например, Google, SQL).
Входная строка может содержать любое количество полей. Несколько вызовов appendField могут быть объединены в цепочку для эффективного добавления нескольких полей в одну и ту же входную строку.
JavaScript
init: function() {
// ...
this.appendDummyInput()
.appendField('hello')
.appendField(new Blockly.FieldLabel('Neil', 'person'));
}

Вызов appendField('hello') на самом деле является сокращением для использования явного конструктора FieldLabel : appendField(new Blockly.FieldLabel('hello')) . Единственный случай, когда может понадобиться использовать конструктор, — это указание имени класса, чтобы метка могла быть стилизована с использованием правила CSS.
Проверка соединения
JavaScript
init: function() {
// ...
this.appendValueInput('NUM')
.setCheck('Number');
}
Метод setCheck используется для проверки типов соединений. Если задан аргумент null, значение по умолчанию, то этот вход может быть подключен к любому блоку. Подробнее см. в разделе Проверка соединений .
Выровнять поля
JavaScript
init: function() {
// ...
this.appendValueInput('LIST')
.appendField('in list')
.setAlign(Blockly.inputs.Align.RIGHT);
}
Метод setAlign используется для выравнивания полей в пределах ввода. Есть три самоописательных значения, которые могут быть переданы в качестве аргумента этой функции: Blockly.inputs.Align.LEFT , Blockly.inputs.Align.RIGHT и Blockly.inputs.Align.CENTER .
Когда блок отображается справа налево (например, арабский и иврит), левое и правое меняются местами. Таким образом, Blockly.inputs.Align.RIGHT выровняет поля по левому краю.