קטגוריות דינמיות הן קטגוריות שאוכלסות מחדש באופן דינמי על סמך פונקציה בכל פעם שהן נפתחות.
Blockly תומך בזה ומאפשר לכם לשייך קטגוריה לפונקציה באמצעות מפתח מחרוזת רשום. הפונקציה צריכה להחזיר הגדרה של התוכן של קטגוריה (כולל בלוקים, לחצנים, תוויות וכו'). אפשר לציין את התוכן בפורמט JSON או XML, אבל מומלץ להשתמש ב-JSON.
חשוב גם לזכור שהפונקציה מקבלת את סביבת העבודה של היעד כפרמטר, כך שהבלוקים בקטגוריה הדינמית יכולים להתבסס על מצב סביבת העבודה.
JSON
// Returns an array of objects.
var coloursFlyoutCallback = function(workspace) {
// Returns an array of hex colours, e.g. ['#4286f4', '#ef0447']
var colourList = getPalette();
var blockList = [];
for (var i = 0; i < colourList.length; i++) {
blockList.push({
'kind': 'block',
'type': 'colour_picker',
'fields': {
'COLOUR': colourList[i]
}
});
}
return blockList;
};
// Associates the function with the string 'COLOUR_PALETTE'
myWorkspace.registerToolboxCategoryCallback(
'COLOUR_PALETTE', coloursFlyoutCallback);
XML
// Returns an array of XML nodes.
var coloursFlyoutCallback = function(workspace) {
// Returns an array of hex colours, e.g. ['#4286f4', '#ef0447']
var colourList = getPalette();
var blockList = [];
for (var i = 0; i < colourList.length; i++) {
var block = document.createElement('block');
block.setAttribute('type', 'colour_picker');
var field = document.createElement('field');
field.setAttribute('name', 'COLOUR');
field.innerText = colourList[i];
block.appendChild(field);
blockList.push(block);
}
return blockList;
};
// Associates the function with the string 'COLOUR_PALETTE'
myWorkspace.registerToolboxCategoryCallback(
'COLOUR_PALETTE', coloursFlyoutCallback);
אחרי שמקשרים את הפונקציות של הקטגוריה הדינמית למפתח מחרוזת (כלומר, רושמים אותן), אפשר להקצות את מפתח המחרוזת הזה למאפיין custom של הגדרת הקטגוריה כדי להפוך את הקטגוריה לדינמית.
JSON
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
XML
<category name="Colours" custom="COLOUR_PALETTE"></category>
קטגוריות דינמיות מובנות
Blockly מספקת שלוש קטגוריות דינמיות מובנות.
-
'VARIABLE'יוצר קטגוריה של משתנים לא מוקלדים. -
'VARIABLE_DYNAMIC'יוצר קטגוריה למשתנים מוקלדים. יש בו לחצנים ליצירת מחרוזות, מספרים וצבעים.
'PROCEDURE'יוצר קטגוריה לבלוקים של פונקציות.
JSON
{
"kind": "category",
"name": "Variables",
"custom": "VARIABLE"
},
{
"kind": "category",
"name": "Variables",
"custom": "VARIABLE_DYNAMIC"
},
{
"kind": "category",
"name": "Functions",
"custom": "PROCEDURE"
}
XML
<category name="Variables" custom="VARIABLE"></category>
<category name="Variables" custom="VARIABLE_DYNAMIC"></category>
<category name="Functions" custom="PROCEDURE"></category>
הערה: המילה 'procedure' (פרוצדורה) מופיעה בכל בסיס הקוד של Blockly, אבל המילה 'function' (פונקציה) מובנת יותר לתלמידים. מצטערים על חוסר ההתאמה.