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'
}
}