الفئات الديناميكية

الفئات الديناميكية هي فئات تتم إعادة ملؤها بشكل ديناميكي استنادًا إلى دالة في كل مرة يتم فيها فتحها.

تتيح 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، ولكن تبيّن أنّ كلمة "دالة" أسهل في الفهم بالنسبة إلى الطلاب. نعتذر عن عدم التطابق.