Определение блока — это объект, определяющий пользовательский блок. Например, он определяет внешний вид блока (текст, поля, соединения, цвет и т. д.), а также его поведение (обработчик событий на уровне блока и т. д.).
Например, этот блок:
может быть определен в JSON или JavaScript следующим образом:
JSON
Blockly.common.defineBlocksWithJsonArray([{
"type": "string_length",
"message0": 'length of %1',
"args0": [
{
"type": "input_value",
"name": "VALUE",
"check": "String"
}
],
"output": "Number",
"colour": 160,
"tooltip": "Returns number of letters in the provided text.",
"helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
}]);
defineBlocksWithJsonArray
создает определение блока из объекта JSON.
JavaScript
Blockly.Blocks['string_length'] = {
init: function() {
this.appendValueInput('VALUE')
.setCheck('String')
.appendField('length of');
this.setOutput(true, 'Number');
this.setColour(160);
this.setTooltip('Returns number of letters in the provided text.');
this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
}
};
Когда вы используете JavaScript, вы создаете определение блока напрямую.
Как работают определения блоков
Определение блока — это миксин , содержащий свойства с функциональными значениями. Когда создается новый блок, эти свойства копируются во вновь созданный объект блока. Blockly вызывает эти функции для вызова пользовательского поведения.
Поскольку функции определения смешаны с объектом блока:
- Ключевое слово
this
в функциях определения относится к объекту блока. То есть его можно использовать для доступа к общедоступным методам и свойствам классаBlock
(илиBlockSvg
).
Blockly определяет небольшое количество функций, которые можно использовать для настройки блоков. Наиболее распространенным из них является init
, который Blockly вызывает для инициализации блока и который используется для определения внешнего вида блока. Полный список см. в свойствах с функциональными значениями в классах Block
и BlockSvg
. Эти свойства эффективно образуют интерфейс для реализации определений блоков; все они не являются обязательными.
Определения блоков также могут иметь пользовательские функции, хотя Blockly не будет вызывать их напрямую. Вместо этого их можно использовать для реализации других функций. Например, обработчик событий на уровне блока (свойство Block.onchange
) может делегировать разные события разным пользовательским функциям.
Как создавать определения блоков
Существует несколько различных способов создания определений блоков:
- Используйте инструменты разработчика Blockly, чтобы определить внешний вид вашего блока. Скопируйте сгенерированный JSON или JavaScript в свой код и при необходимости добавьте собственный код. Для получения дополнительной информации см. Инструменты разработчика Blockly .
- Найдите похожий блок, скопируйте его определение и измените его по мере необходимости. Дополнительные сведения см. в разделе Изменение существующих определений .
- Напишите определение блока вручную. Дополнительные сведения см. в разделе JSON и JavaScript .