Blocchi preimpostati

Puoi configurare (preimpostare) lo stato dei blocchi in una toolbox. Ad esempio, puoi impostare un campo su un valore predefinito o collegare due blocchi. Puoi anche creare blocchi ombra, che fungono da valori predefiniti per i blocchi secondari.

Esempi

Ecco alcuni esempi di blocchi preimpostati.

Blocco con un valore di campo preimpostato

Di seguito è riportato un blocco math_number il cui campo mostra il numero 42 anziché il valore predefinito 0:

Un blocco numerico il cui valore è preimpostato su 42.

Di seguito è riportata una toolbox che imposta questo campo:

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>

Blocchi pre-collegati

Di seguito è riportato un blocco controls_for a cui sono collegati tre blocchi math_number:

Un blocco &quot;count with i from value to value by value&quot;. I tre input di valore
sono collegati a blocchi numerici con i valori 1, 10 e
1.

Di seguito è riportata una toolbox che pre-collega questi blocchi:

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>

Blocchi disattivati

I blocchi disattivati non possono essere trascinati dalla toolbox. I blocchi possono essere disattivati singolarmente utilizzando la proprietà facoltativa disabled.

Un menu a comparsa con tre blocchi. Il terzo blocco è disattivato e
non selezionabile.

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>

Puoi anche disattivare o attivare un blocco a livello di programmazione utilizzando setDisabledReason.

Configurare i blocchi

Puoi configurare un blocco in una toolbox in qualsiasi modo tu possa configurarlo in un'area di lavoro. Ad esempio, puoi impostare i valori dei campi, collegare i blocchi agli input di valore o istruzione, aggiungere commenti e comprimere o disattivare i blocchi. Ciò è possibile perché le toolbox utilizzano lo stesso codice per configurare i blocchi che le aree di lavoro utilizzano per serializzarli.

Significa anche che è facile creare una configurazione di blocco. Carica il blocco in un'area di lavoro, configurarlo come preferisci e serializzalo eseguendo il seguente codice nella console.

JSON

console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));

XML

console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));

Puoi quindi copiare il codice di configurazione e incollarlo nella toolbox. Assicurati di rimuovere le proprietà x, y e id, che vengono ignorate dalla toolbox.

Campi variabili

I campi variabili potrebbero dover essere specificati in modo diverso quando si trovano in una toolbox rispetto a quando vengono serializzati.

In particolare, quando i campi variabili vengono serializzati normalmente in JSON, contengono solo l'ID della variabile che rappresentano, perché il nome e il tipo della variabile vengono serializzati separatamente. Tuttavia, le toolbox non contengono queste informazioni, quindi devono essere incluse direttamente nel campo variabile.

{
  "kind": "flyoutToolbox",
  "content": [
    {
      "kind": "block",
      "type": "controls_for",
      "fields": {
        "VAR": {
          "name": "index",
          "type": "Number"
        }
      }
    }
  ]
}

Blocchi ombra

I blocchi ombra sono blocchi segnaposto che svolgono diverse funzioni:

  • Indicano i valori predefiniti per il blocco principale.
  • Consentono agli utenti di digitare i valori direttamente senza dover recuperare un blocco numerico o di stringa.
  • A differenza di un blocco normale, vengono sostituiti se l'utente rilascia un blocco sopra di essi.
  • Informano l'utente sul tipo di valore previsto.

Per creare un blocco ombra, utilizza la proprietà shadow (JSON) o il tag <shadow> (XML) anziché la proprietà block o il tag <block>. Ad esempio, di seguito è riportato un blocco math_arithmetic a cui sono collegati due blocchi ombra math_number:

Un blocco `math_arithmetic` con due input di valori separati da un menu a discesa dell&#39;operatore in cui è selezionato l&#39;operatore più. Ogni input di valore contiene un blocco di numeri ombra, che è visualizzato in grigio per indicare che un altro blocco può sostituirlo.

Di seguito è riportata una toolbox che utilizza questi blocchi ombra:

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>