Kategorie dynamiczne to kategorie, które są dynamicznie wypełniane na podstawie funkcji za każdym razem, gdy są otwierane.
Blockly obsługuje to, umożliwiając powiązanie kategorii z funkcją za pomocą zarejestrowanego klucza ciągu znaków. Funkcja powinna zwracać definicję zawartości kategorii (w tym bloki, przyciski, etykiety itp.). Zawartość można określić w formacie JSON lub XML, ale zalecamy używanie formatu JSON.
Pamiętaj też, że funkcja otrzymuje docelowy obszar roboczy jako parametr, więc bloki w kategorii dynamicznej mogą być oparte na stanie obszaru roboczego.
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);
Gdy funkcje kategorii dynamicznej są powiązane z kluczem ciągu znaków (czyli zarejestrowane), możesz przypisać ten klucz ciągu znaków do właściwości custom definicji kategorii, aby kategoria była dynamiczna.
JSON
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
XML
<category name="Colours" custom="COLOUR_PALETTE"></category>
Wbudowane kategorie dynamiczne
Blockly udostępnia 3 wbudowane kategorie dynamiczne.
'VARIABLE'tworzy kategorię dla zmiennych bez typu.'VARIABLE_DYNAMIC'tworzy kategorię dla z typem zmiennych. Zawiera przyciski do tworzenia ciągów znaków, liczb i kolorów.'PROCEDURE'tworzy kategorię dla bloków funkcji.
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>
Uwaga: w całej bazie kodu Blockly używane jest słowo „procedure” (procedura), ale słowo „function” (funkcja) jest bardziej zrozumiałe dla uczniów. Przepraszamy za niezgodność.