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:
Blockieren mit einem voreingestellten Feldwert
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, in der diese Blöcke bereits verbunden sind:
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.
Blockierungen 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()));
Anschließend können Sie den Konfigurationscode kopieren und in Ihre Toolbox 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 in das Variablenfeld eingefügt 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, die damit verbunden sind:
Hier sehen Sie 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>