Kategori dinamis

Kategori dinamis adalah kategori yang diisi ulang secara dinamis berdasarkan fungsi setiap kali dibuka.

Blockly mendukung hal ini dengan memungkinkan Anda mengaitkan kategori dengan fungsi melalui kunci string terdaftar. Fungsi ini akan menampilkan definisi konten kategori (termasuk blok, tombol, label, dll.). Konten dapat ditentukan sebagai JSON atau XML, meskipun JSON direkomendasikan.

Perhatikan juga bahwa fungsi ini diberi ruang kerja target sebagai parameter, sehingga blok dalam kategori dinamis Anda dapat didasarkan pada status ruang kerja.

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);

Setelah fungsi kategori dinamis dikaitkan dengan kunci string (alias terdaftar), Anda dapat menetapkan kunci string ini ke properti custom dari definisi kategori untuk membuat kategori menjadi dinamis.

JSON

{
  "kind": "category",
  "name": "Colours",
  "custom": "COLOUR_PALETTE"
}

XML

<category name="Colours" custom="COLOUR_PALETTE"></category>

Kategori dinamis bawaan

Blockly menyediakan tiga kategori dinamis bawaan.

  • 'VARIABLE' membuat kategori untuk variabel tanpa jenis.
  • 'VARIABLE_DYNAMIC' membuat kategori untuk variabel berjenis. Alat ini memiliki tombol untuk membuat string, angka, dan warna.
  • 'PROCEDURE' membuat kategori untuk blok fungsi.

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>

Catatan: Kata 'prosedur' digunakan di seluruh codebase Blockly, tetapi kata 'fungsi' telah terbukti lebih mudah dipahami oleh siswa. Maaf atas ketidakcocokan ini.