Penyesuaian lanjutan

Blockly memungkinkan Anda menyesuaikan fungsi tertentu dengan mengganti class Blockly yang sesuai.

Class yang dapat diganti

Class Blockly berikut dapat diganti:

Class Blockly Antarmuka Nama pendaftaran
Blockly.dragging.Dragger Blockly.IDragger blockDragger
Blockly.ConnectionChecker Blockly.IConnectionChecker connectionChecker
Blockly.InsertionMarkerPreviewer Blockly.IConnectionPreviewer connectionPreviewer
Blockly.Flyout Blockly.IFlyout flyoutsVerticalToolbox
flyoutsHorizontalToolbox
Blockly.MetricsManager Blockly.IMetricsManager metricsManager
Blockly.blockRendering.Renderer* -- renderer
Blockly.Toolbox Blockly.IToolbox toolbox

* Ini adalah class dasar untuk semua perender. Anda dapat membuat subclass-nya atau renderer yang ada. Lihat Membuat perender baru.

Antarmuka Blockly ditentukan di core/interfaces.

Membuat class pengganti

Untuk membuat class pengganti, terapkan fungsi di antarmuka yang sesuai. Anda dapat menerapkan semua fungsi ini di class baru, atau memperluas class Blockly dan hanya mengganti fungsi yang ingin diubah. Satu-satunya persyaratan adalah Anda (atau class dasar) menerapkan semua fungsi di antarmuka dan mematuhi persyaratan apa pun yang dijelaskan dalam komentar di antarmuka.

Untuk menunjukkan kepada pemeriksa jenis bahwa Anda menerapkan antarmuka tertentu, anotasi class Anda dengan tag JSDoc @implements {InterfaceName} (dalam JavaScript) atau kata kunci implements (di TypeScript).

Menyisipkan class pengganti

Untuk memberi tahu Blockly tentang class pengganti Anda, gunakan properti plugins dalam opsi konfigurasi yang diteruskan ke Blockly.inject. (Terlepas dari nama properti ini, class Anda tidak perlu dikemas dan didistribusikan melalui npm seperti plugin yang digunakan untuk memperluas Blockly.)

Anda dapat meneruskan subclass ke metode inject.

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': CustomMetricsManagerClass
  }
}

Atau, Anda dapat mendaftarkan class menggunakan Blockly.registry dan menggunakan nama registry untuk memasukkan class. Hal ini berguna jika Anda menyimpan opsi konfigurasi sebagai JSON murni.

Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', SubClass);

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': 'YOUR_NAME'
  }
}