אפשר להגדיר (מראש) את המצב של הבלוקים בארגז הכלים. לדוגמה, אפשר להגדיר שדה לערך ברירת מחדל או לחבר שני בלוקים. אפשר גם ליצור בלוקי צל, שמשמשים כברירות מחדל לבלוקי צאצא.
דוגמאות
הנה כמה דוגמאות לבלוקים מוגדרים מראש.
חסימה עם ערך שדה מוגדר מראש
math_number כאן מוצג בלוק שהשדה שלו מציג את המספר 42 במקום ברירת המחדל 0:

הנה ארגז כלים שמגדיר את השדה הזה:
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>
בלוקים עם קישור מקדים
הנה בלוק controls_for שמחוברים אליו שלושה בלוקים math_number:

וכאן יש ארגז כלים שמבצע חיבור מראש של הבלוקים האלה:
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>
בלוקים מושבתים
אי אפשר לגרור בלוקים מושבתים מארגז הכלים. אפשר להשבית בלוקים בנפרד באמצעות המאפיין האופציונלי 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>
אפשר גם להשבית או להפעיל חסימה באופן פרוגרמטי באמצעות setDisabledReason.
הגדרת החסימות
אפשר להגדיר בלוק בארגז כלים בכל דרך שבה אפשר להגדיר אותו במרחב עבודה. לדוגמה, אפשר להגדיר ערכים לשדות, לחבר בלוקים לכניסות של ערכים או של הצהרות, להוסיף הערות ולכווץ או להשבית בלוקים. הדבר אפשרי כי ארגזי הכלים משתמשים באותו קוד כדי להגדיר בלוקים שסביבות העבודה משתמשות בהם כדי לבצע סריאליזציה שלהם.
בנוסף, קל ליצור הגדרות של בלוקים. פשוט טוענים את הבלוק לסביבת עבודה, מגדירים אותו לפי הצורך ומבצעים סריאליזציה על ידי הרצת הקוד הבא במסוף.
JSON
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
XML
console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));
לאחר מכן, תוכלו להעתיק את קוד ההגדרה ולהדביק אותו בארגז הכלים. חשוב להסיר את המאפיינים x, y ו-id, שהכלי מתעלם מהם.
שדות משתנים
יכול להיות שיהיה צורך לציין שדות משתנים בצורה שונה כשהם נמצאים בארגז כלים לעומת כשהם עוברים סריאליזציה.
בפרט, כששדות משתנים עוברים סריאליזציה ל-JSON, הם מכילים רק את המזהה של המשתנה שהם מייצגים, כי השם והסוג של המשתנה עוברים סריאליזציה בנפרד. עם זאת, ארגזי הכלים לא מכילים את המידע הזה, ולכן צריך לכלול אותו ישירות בשדה המשתנה.
{
"kind": "flyoutToolbox",
"content": [
{
"kind": "block",
"type": "controls_for",
"fields": {
"VAR": {
"name": "index",
"type": "Number"
}
}
}
]
}
בלוקים של צללים
בלוקים של צל הם בלוקים של placeholder שמבצעים כמה פונקציות:
- הם מציינים את ערכי ברירת המחדל של בלוק האב שלהם.
- הם מאפשרים למשתמשים להקליד ערכים ישירות בלי צורך לאחזר מספר או בלוק מחרוזת.
- בניגוד לחסימה רגילה, אם המשתמש משחרר חסימה מעליהן, הן מוחלפות.
- הם מודיעים למשתמש על סוג הערך הצפוי.
כדי ליצור בלוק צל, צריך להשתמש במאפיין shadow (JSON) או בתג <shadow> (XML) במקום במאפיין block או בתג <block>. לדוגמה, הנה בלוק math_arithmetic עם שני בלוקי צל math_number שמחוברים אליו:

והנה ארגז כלים שמשתמש בבלוקים המוצללים האלה:
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>