دستههای پویا، دستههایی هستند که هر بار که باز میشوند، بر اساس یک تابع، به صورت پویا دوباره پر میشوند.
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);
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);
پس از اینکه توابع دستهبندی پویا با یک کلید رشتهای (که به آن register هم میگویند) مرتبط شدند، میتوانید این کلید رشتهای را به ویژگی custom تعریف دستهبندی خود اختصاص دهید تا دستهبندی پویا شود.
جیسون
{
"kind": "category",
"name": "Colours",
"custom": "COLOUR_PALETTE"
}
XML
<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"
}
XML
<category name="Variables" custom="VARIABLE"></category>
<category name="Variables" custom="VARIABLE_DYNAMIC"></category>
<category name="Functions" custom="PROCEDURE"></category>
توجه: کلمه «رویه» در سراسر کدبیس Blockly استفاده شده است، اما کلمه «تابع» برای دانشآموزان قابل فهمتر بوده است. بابت این عدم تطابق عذرخواهی میکنیم.