קטגוריות דינמיות הן קטגוריות שמאוכלסות מחדש באופן דינמי על סמך פונקציה בכל פעם שהן נפתחות.
כדי לעשות זאת, Blockly מאפשר לכם לשייך קטגוריה לפונקציה באמצעות מפתח מחרוזת רשום. הפונקציה צריכה להחזיר הגדרה של תוכן קטגוריה (כולל בלוקים, לחצנים, תוויות וכו'). אפשר לציין את התוכן כ-JSON או כ-XML, אבל מומלץ להשתמש ב-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);
// Returns an arry 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
של הגדרת הקטגוריה כדי להפוך את הקטגוריה לדינמית.
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
<category name="Colours" custom="COLOUR_PALETTE"></category>
קטגוריות דינמיות מובנות
ב-Blockly יש שלוש קטגוריות דינמיות מובנות.
'VARIABLE'
יוצר קטגוריה למשתנים ללא סוג.'VARIABLE_DYNAMIC'
יוצר קטגוריה למשתנים מסוג. יש בו לחצנים ליצירת מחרוזות, מספרים וצבעים.'PROCEDURE'
יוצרת קטגוריה של בלוקים של פונקציות.
{
"kind": "category",
"name": "Variables",
"custom": "VARIABLE"
},
{
"kind": "category",
"name": "Variables",
"custom": "VARIABLE_DYNAMIC"
},
{
"kind": "category",
"name": "Functions",
"custom": "PROCEDURE"
}
<category name="Variables" custom="VARIABLE"></category>
<category name="Variables" custom="VARIABLE_DYNAMIC"></category>
<category name="Functions" custom="PROCEDURE"></category>
הערה: המילה 'procedure' (נוהל) מופיעה בכל קוד הבסיס של Blockly, אבל התלמידים מבינים טוב יותר את המילה 'function' (פונקציה). סליחה על חוסר ההתאמה.