אפשר להגדיר מראש את המצב של הבלוקים בארגז הכלים. לדוגמה, אפשר להגדיר שדה לערך ברירת מחדל או לחבר שני בלוקים. אפשר גם ליצור חסימות צל, שמשמשות כברירות מחדל לחסימות של חשבונות צאצא.
דוגמאות
הנה כמה דוגמאות לבלוקים מוגדרים מראש.
חסימה באמצעות ערך מוגדר מראש בשדה
בדוגמה הבאה מוצג 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>