Vordefinierte Blöcke

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:

Ein Zahlenblock, dessen Wert auf 42 voreingestellt ist.

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:

Ein Block vom Typ „Zähle mit i von Wert bis Wert nach Wert“. Die drei Werteingaben sind mit Zahlenblöcken mit den Werten 1, 10 und 1 verbunden.

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.

Ein Flyout-Menü mit drei Blöcken. Der dritte Block ist deaktiviert und ausgegraut.

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:

Ein „math_arithmetic“-Block mit zwei Werteingaben, die durch ein Drop-down-Menü mit dem ausgewählten Pluszeichen getrennt sind. Jede Werteingabe enthält einen Schattennummernblock, der ausgegraut ist, um zu zeigen, dass er durch einen anderen Block ersetzt werden kann.

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>