Puoi configurare (preimpostare) lo stato dei blocchi in una casella degli strumenti. 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.
Bloccare con un valore di campo preimpostato
Ecco un blocco math_number
il cui campo mostra il numero 42 anziché il valore
predefinito 0:
Ecco una casella degli strumenti 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 precollegati
Ecco un blocco controls_for
a cui sono collegati tre blocchi math_number
:
Ecco una casella degli strumenti che precollega 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 casella degli strumenti. I blocchi possono essere disattivati singolarmente
utilizzando la proprietà facoltativa 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>
Puoi anche disattivare o attivare un blocco in modo programmatico utilizzando
setDisabledReason
.
Configurare i blocchi
Puoi configurare un blocco in una casella degli strumenti in qualsiasi modo tu possa configurarlo in un workspace. Ad esempio, puoi impostare i valori dei campi, collegare i blocchi agli input di valori o istruzioni, aggiungere commenti e comprimere o disattivare i blocchi. Ciò è possibile perché le toolboxes utilizzano lo stesso codice per configurare i blocchi che gli spazi di lavoro utilizzano per serializzarli.
Ciò significa anche che è facile creare una configurazione di blocco. Carica il blocco in uno spazio di lavoro, configurarlo come preferisci e serializzarlo 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 tua casella degli attrezzi. Assicurati
di rimuovere le proprietà x
, y
e id
, che vengono ignorate dalla casella degli strumenti.
Campi variabili
I campi variabili potrebbero dover essere specificati in modo diverso quando si trovano in una casella degli strumenti rispetto a quando vengono serializzati.
In particolare, quando i campi variabili vengono serializzati in JSON, contengono solo l'ID della variabile che rappresentano, perché il nome e il tipo della variabile vengono serializzati separatamente. Tuttavia, le toolboxes non contengono queste informazioni, quindi devono essere incluse direttamente nel campo della 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 di numeri o stringhe.
- A differenza di un blocco normale, vengono sostituiti se l'utente rilascia un blocco sopra di loro.
- Informano l'utente del 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
con due blocchi ombra math_number
collegati
a esso:
Ecco una cassetta degli attrezzi 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>