Вы можете настроить (предустановить) состояние блоков в панели инструментов. Например, можно задать для поля значение по умолчанию или соединить два блока. Также можно создавать теневые блоки , которые будут служить значениями по умолчанию для дочерних блоков.
Примеры
Вот несколько примеров предустановленных блоков.
Блок с предустановленным значением поля
Вот блок math_number
, поле которого отображает число 42 вместо значения по умолчанию 0:
А вот набор инструментов, который задает это поле:
JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "math_number",
"fields": {
"NUM": 42
}
},
]
}
XML
<xml id="toolbox" style="display: none">
<block type="math_number">
<field name="NUM">42</field>
</block>
</xml>
Предварительно подключенные блоки
Вот блок controls_for
, к которому подключены три блока math_number
:
А вот набор инструментов, который предварительно соединяет эти блоки:
JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "controls_for",
"inputs": {
"FROM": {
"block": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
"TO": {
"block": {
"type": "math_number",
"fields": {
"NUM": 10
}
}
},
"BY": {
"block": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
}
},
]
}
XML
<xml id="toolbox" style="display: none">
<block type="controls_for">
<value name="FROM">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
<value name="TO">
<block type="math_number">
<field name="NUM">10</field>
</block>
</value>
<value name="BY">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
</block>
</xml>
Отключенные блоки
Отключённые блоки нельзя перетаскивать из панели инструментов. Блоки можно отключать по отдельности с помощью необязательного свойства disabled
.
JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type":"math_number"
},
{
"kind": "block",
"type": "math_arithmetic"
},
{
"kind": "block",
"type": "math_single",
"disabled": "true"
}
]
}
XML
<xml id="toolbox" style="display: none">
<block type="math_number"></block>
<block type="math_arithmetic"></block>
<block type="math_single" disabled="true"></block>
</xml>
Вы также можете программно отключить или включить блок с помощью setDisabledReason
.
Настройте свои блоки
Вы можете настроить блок в панели инструментов так же, как и в рабочей области. Например, вы можете задать значения полей, подключить блоки к полям ввода значений или операторов, добавить комментарии, а также свернуть или отключить блоки. Это возможно, поскольку панели инструментов используют тот же код для настройки блоков, что и рабочие области для их сериализации.
Это также означает, что создать конфигурацию блока легко. Просто загрузите блок в рабочее пространство, настройте его нужным образом и сериализуйте, выполнив следующий код в консоли.
JSON
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
XML
console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));
Затем вы можете скопировать код конфигурации и вставить его в панель инструментов. Не забудьте удалить свойства x
, y
и id
, которые панель инструментов игнорирует.
Переменные поля
Переменные поля, возможно, придется указывать по-разному, когда они находятся в наборе инструментов и когда они сериализованы.
В частности, когда поля переменных обычно сериализуются в JSON, они содержат только идентификатор переменной, которую представляют, поскольку имя и тип переменной сериализуются отдельно. Однако наборы инструментов не содержат этой информации, поэтому её необходимо включить непосредственно в поле переменной.
{
"kind": "flyoutToolbox",
"content": [
{
"kind": "block",
"type": "controls_for",
"fields": {
"VAR": {
"name": "index",
"type": "Number"
}
}
}
]
}
Теневые блоки
Теневые блоки — это блоки-заполнители, которые выполняют несколько функций:
- Они указывают значения по умолчанию для своего родительского блока.
- Они позволяют пользователям вводить значения напрямую, без необходимости извлекать числовой или строковый блок.
- В отличие от обычного блока, они заменяются, если пользователь кладет на них блок.
- Они информируют пользователя о типе ожидаемого значения.
Чтобы создать теневой блок, используйте свойство shadow
(JSON) или тег <shadow>
(XML) вместо свойства block
или тега <block>
. Например, вот блок math_arithmetic
, к которому подключены два теневых блока math_number
:
А вот набор инструментов, который использует эти теневые блоки:
JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "math_arithmetic",
"fields": {
"OP": "ADD"
},
"inputs": {
"A": {
"shadow": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
"B": {
"shadow": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
}
}
},
]
}
XML
<xml id="toolbox" style="display: none">
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</xml>