डाइनैमिक कैटगरी, वे कैटगरी होती हैं जो हर बार खोले जाने पर, किसी फ़ंक्शन के आधार पर डाइनैमिक तरीके से फिर से भर जाती हैं.
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>
ध्यान दें: Blockly के कोडबेस में, 'प्रोसीज़र' शब्द का इस्तेमाल किया जाता है. हालांकि, 'फ़ंक्शन' शब्द को छात्र-छात्राएं ज़्यादा आसानी से समझ पाते हैं. शब्दों के इस्तेमाल में अंतर के लिए, हम माफ़ी चाहते हैं.