Ekstensi dan mixin

Ekstensi adalah fungsi yang dijalankan pada blok selama inisialisasi. Hal ini sering kali menambahkan beberapa konfigurasi atau perilaku kustom ke blok. Mixin memungkinkan Anda menambahkan properti atau fungsi bantuan ke blok, tetapi tidak langsung menjalankannya.

Anda hanya perlu menggunakan ekstensi atau mixin saat menentukan blok dengan JSON. Jika menggunakan JavaScript untuk menentukan blok, Anda dapat memanggil fungsi inisialisasi langsung di init dan menambahkan metode atau properti langsung ke definisi.

Ekstensi

Ekstensi adalah fungsi yang berjalan di setiap blok dari jenis tertentu saat blok dibuat. Misalnya, mereka dapat menambahkan konfigurasi kustom (misalnya menetapkan tooltip blok) atau perilaku kustom (misalnya menambahkan pemroses peristiwa ke blok).

// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
    'parent_tooltip_extension',
    function() { // this refers to the block that the extension is being run on
      var thisBlock = this;
      this.setTooltip(function() {
        var parent = thisBlock.getParent();
        return (parent && parent.getInputsInline() && parent.tooltip) ||
            Blockly.Msg['MATH_NUMBER_TOOLTIP'];
      });
    });

Ekstensi harus "terdaftar" agar dapat dikaitkan dengan kunci string. Kemudian, Anda dapat menetapkan kunci string ini ke properti extensions dari definisi JSON jenis blok untuk menerapkan ekstensi ke blok.

{
 //...,
 "extensions": ["parent_tooltip_extension",]
}

Anda juga dapat menambahkan beberapa ekstensi sekaligus. Perhatikan bahwa properti extensions harus berupa array, meskipun Anda hanya menerapkan satu ekstensi.

{
  //...,
  "extensions": ["parent_tooltip_extension", "break_warning_extension"],
}

Mixin

Blockly juga menyediakan metode praktis untuk situasi saat Anda ingin menambahkan beberapa properti/fungsi bantuan ke blok, tetapi tidak langsung menjalankannya. Hal ini berfungsi dengan memungkinkan Anda mendaftarkan objek mixin yang berisi semua properti/metode tambahan. Objek mixin kemudian digabungkan dalam fungsi yang menerapkan mixin setiap kali instance jenis blok tertentu dibuat.

Blockly.Extensions.registerMixin('my_mixin', {
  someProperty: 'a cool value',

  someMethod: function() {
    // Do something cool!
  }
))`

Kunci string yang terkait dengan mixin dapat direferensikan dalam JSON seperti ekstensi lainnya.

{
 //...,
 "extensions": ["my_mixin"],
}