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 jenis registry
Blockly.dragging.Dragger Blockly.IDragger blockDragger
Blockly.ConnectionChecker Blockly.IConnectionChecker connectionChecker
Blockly.InsertionMarkerPreviewer Blockly.IConnectionPreviewer connectionPreviewer
Blockly.HorizontalFlyout Blockly.IFlyout flyoutsHorizontalToolbox
Blockly.VerticalFlyout Blockly.IFlyout flyoutsVerticalToolbox
Blockly.MetricsManager Blockly.IMetricsManager metricsManager
Blockly.Toolbox Blockly.IToolbox toolbox
Blockly.VariableMap Blockly.IVariableMap variableMap
Blockly.VariableModel Blockly.IVariableModel --

Untuk mengetahui informasi tentang cara mengganti perender, lihat Membuat perender kustom.

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 Anda ubah. Satu-satunya persyaratan adalah Anda (atau class dasar) mengimplementasikan semua fungsi dalam antarmuka dan mematuhi persyaratan apa pun yang dijelaskan dalam komentar pada antarmuka.

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

Memberi tahu Blockly tentang class pengganti Anda

Ada dua cara untuk memberi tahu Blockly tentang class pengganti Anda: mendaftarkannya sebagai class default dari jenisnya (lebih disarankan) atau menyuntikkannya menggunakan opsi konfigurasi plugins.

Mendaftarkan class pengganti sebagai default

Cara yang lebih disukai untuk memberi tahu Blockly tentang class pengganti Anda adalah dengan mendaftarkannya sebagai default untuk jenisnya. Untuk melakukannya, panggil Blockly.registry.register menggunakan nama Blockly.registry.DEFAULT dan tetapkan parameter opt_allowOverrides ke true.

Blockly.registry.register(
  Blockly.registry.Type.VARIABLE_MODEL,
  Blockly.registry.DEFAULT,
  CustomVariableModel,
  true,
);

Menyuntikkan class pengganti

Anda juga dapat menyuntikkan class pengganti menggunakan opsi konfigurasi plugins. Ini adalah objek yang menggunakan nama jenis pendaftaran sebagai nama properti dan class pengganti atau nama terdaftar sebagai nilai properti.

(Terlepas dari nama properti plugins, class Anda tidak perlu dikemas dan didistribusikan melalui npm seperti plugin yang digunakan untuk memperluas Blockly.)

Teruskan class pengganti Anda ke Blockly.inject:

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

Atau, daftarkan class Anda menggunakan Blockly.registry.register dan teruskan nama yang terdaftar ke Blockly.inject. Hal ini berguna jika Anda menyimpan opsi konfigurasi sebagai JSON murni.

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

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