Sie können den Status von Blöcken in einer Toolbox konfigurieren (voreinstellen). Sie können beispielsweise ein Feld auf einen Standardwert festlegen oder zwei Blöcke miteinander verbinden. Sie können auch Schattenblöcke erstellen, die als Standardwerte für untergeordnete Blöcke dienen.
Beispiele
Hier einige Beispiele für voreingestellte Blöcke.
Mit einem voreingestellten Feldwert blockieren
Hier sehen Sie einen math_number-Block, in dessen Feld die Zahl 42 anstelle des Standardwerts 0 angezeigt wird:

Hier sehen Sie ein Tool, mit dem dieses Feld festgelegt wird:
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>
Vorverbundene Blöcke
Hier sehen Sie einen controls_for-Block, an den drei math_number-Blöcke angeschlossen sind:

Hier ist eine Toolbox, die diese Blöcke vorab verbindet:
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>
Deaktivierte Blöcke
Deaktivierte Blöcke können nicht aus der Toolbox gezogen werden. Blöcke können mit der optionalen Property disabled einzeln deaktiviert werden.

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>
Sie können einen Block auch programmatisch mit setDisabledReason deaktivieren oder aktivieren.
Blöcke konfigurieren
Sie können einen Block in einer Toolbox genauso konfigurieren wie in einem Arbeitsbereich. Sie können beispielsweise Feldwerte festlegen, Blöcke mit Wert- oder Anweisungseingaben verbinden, Kommentare hinzufügen und Blöcke minimieren oder deaktivieren. Das ist möglich, weil in Toolboxes derselbe Code zum Konfigurieren von Blöcken verwendet wird, der auch in Arbeitsbereichen zum Serialisieren von Blöcken verwendet wird.
Das bedeutet auch, dass es einfach ist, eine Blockkonfiguration zu erstellen. Laden Sie Ihren Block einfach in einen Arbeitsbereich, konfigurieren Sie ihn nach Bedarf und serialisieren Sie ihn, indem Sie den folgenden Code in der Konsole ausführen.
JSON
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
XML
console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));
Sie können den Konfigurationscode dann kopieren und in Ihr Tool einfügen. Entfernen Sie die Attribute x, y und id, die von der Toolbox ignoriert werden.
Variable Felder
Variablenfelder müssen möglicherweise unterschiedlich angegeben werden, je nachdem, ob sie sich in einer Toolbox befinden oder serialisiert werden.
Wenn Variablenfelder normalerweise in JSON serialisiert werden, enthalten sie nur die ID der Variablen, die sie darstellen, da der Name und der Typ der Variablen separat serialisiert werden. Toolboxen enthalten diese Informationen jedoch nicht. Sie müssen also direkt im Variablenfeld angegeben werden.
{
"kind": "flyoutToolbox",
"content": [
{
"kind": "block",
"type": "controls_for",
"fields": {
"VAR": {
"name": "index",
"type": "Number"
}
}
}
]
}
Schattenblöcke
Schattenblöcke sind Platzhalterblöcke, die mehrere Funktionen erfüllen:
- Sie geben die Standardwerte für den übergeordneten Block an.
- Damit können Nutzer Werte direkt eingeben, ohne einen Zahlen- oder Stringblock abrufen zu müssen.
- Im Gegensatz zu einem regulären Block werden sie ersetzt, wenn der Nutzer einen Block darauf zieht.
- Sie informieren den Nutzer über den erwarteten Werttyp.
Verwenden Sie zum Erstellen eines Schattenblocks die Property shadow (JSON) oder das Tag <shadow> (XML) anstelle der Property block oder des Tags <block>. Hier sehen Sie beispielsweise einen math_arithmetic-Block mit zwei math_number-Schattenblöcken:

Hier ist eine Toolbox, in der diese Schattenblöcke verwendet werden:
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>