Dinamik kategoriler, her açıldığında bir işleve göre dinamik olarak yeniden doldurulan kategorilerdir.
Blockly, kayıtlı bir dize anahtarı aracılığıyla bir kategoriyi bir işlevle ilişkilendirmenize olanak tanıyarak bunu destekler. İşlev, bir kategorinin içeriğinin (bloklar, düğmeler, etiketler vb. dahil) tanımını döndürmelidir. İçerikler JSON veya XML olarak belirtilebilir ancak JSON önerilir.
Ayrıca, işlevin hedef çalışma alanını parametre olarak sağladığını, bu nedenle dinamik kategorinizdeki blokların çalışma alanının durumuna göre belirlenebileceğini unutmayın.
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);
Dinamik kategori işlevleri bir dize anahtarıyla ilişkilendirildikten (diğer adıyla kaydedildikten) sonra, kategoriyi dinamik hale getirmek için bu dize anahtarını kategori tanımınızın custom özelliğine atayabilirsiniz.
JSON
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
XML
<category name="Colours" custom="COLOUR_PALETTE"></category>
Dahili dinamik kategoriler
Blockly'da üç yerleşik dinamik kategori bulunur.
'VARIABLE'türsüz değişkenler için bir kategori oluşturur.'VARIABLE_DYNAMIC', türlenmiş değişkenler için bir kategori oluşturur. Dizeler, sayılar ve renkler oluşturmak için düğmeler içerir.'PROCEDURE'işlev blokları için bir kategori oluşturur.
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>
Not: "Prosedür" kelimesi Blockly kod tabanında kullanılsa da "işlev" kelimesinin öğrenciler tarafından daha anlaşılır olduğu görülmüştür. Uyuşmazlık için özür dileriz.