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 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şleve hedef çalışma alanı parametre olarak sağlandığından dinamik kategorinizdeki blokların çalışma alanının durumuna bağlı olabileceğini unutmayın.
// 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);
Dinamik kategori işlevleri bir dize anahtarıyla ilişkilendirildikten (diğer bir deyişle kaydedildikten) sonra, kategoriyi dinamik hale getirmek için bu dize anahtarını kategori tanımınızın custom
mülküne atayabilirsiniz.
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
<category name="Colours" custom="COLOUR_PALETTE"></category>
Yerleşik dinamik kategoriler
Blockly, üç yerleşik dinamik kategori sunar.
'VARIABLE'
, tanımlanmamış değişkenler için bir kategori oluşturur.'VARIABLE_DYNAMIC'
, yazılı değişkenler için bir kategori oluşturur. Dize, sayı ve renk oluşturmak için düğmeler bulunur.'PROCEDURE'
, işlev blokları için bir kategori oluşturur.
{
"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>
Not: Blockly kod tabanında "prosedür" kelimesi kullanılır ancak "işlev" kelimesinin öğrenciler tarafından daha anlaşılır olduğu tespit edilmiştir. Eşleşme olmamasına üzüldük.