Beberapa ikon memiliki status yang perlu disimpan, sementara yang lain dibuat instance-nya berdasarkan status yang sudah ada. Misalnya, ikon komentar harus menyimpan teksnya, sedangkan ikon peringatan tidak perlu disimpan karena dibuat instance berdasarkan cara blok terhubung.
Jika ikon perlu menyimpan statusnya, Anda harus mengimplementasikan
antarmuka ISerializable
dan register ikon
Anda.
Status yang ditampilkan oleh ikon Anda disertakan dalam properti icons
status blok Anda:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
Menyimpan status
Untuk menyimpan status ikon, Anda harus menerapkan
metode saveState
dari antarmuka
ISerializable
. Metode ini dapat menampilkan json arbitrer, yang diteruskan ke
metode loadState
Anda.
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
Serialisasi dan pencadangan data lengkap
saveState
juga menerima parameter doFullSerialization
opsional. Ini
digunakan oleh ikon yang mereferensikan status yang diserialisasi oleh
serializer berbeda (seperti model data pendukung). Parameter ini menandakan bahwa
status yang dirujuk tidak akan tersedia saat blok dideserialisasi, sehingga
ikon harus melakukan serialisasi semua status cadangan itu sendiri. Misalnya, hal ini berlaku
saat satu blok diserialisasi, atau saat blok disalin-ditempel.
Dua kasus penggunaan umum untuk hal ini adalah:
- Jika satu blok dimuat ke ruang kerja yang tidak memiliki model data pendukung, ikon memiliki cukup informasi dalam statusnya sendiri untuk membuat model data baru.
- Jika blok disalin-tempel, ikon akan selalu membuat model data pendukung baru, bukan mereferensikan model yang sudah ada.
Status pemuatan
Untuk menyimpan status ikon, Anda harus menerapkan
metode loadState
dari antarmuka
ISerializable
. Metode ini menggunakan JSON yang ditampilkan oleh metode saveState
Anda.
loadState(state) {
this.state = state;
}
Daftarkan class ikon
Terakhir, Anda harus mendaftarkan ikon agar sistem serialisasi dapat
membuat instance ikon tersebut. Ingat bahwa IconType
yang digunakan untuk mendaftarkan
ikon Anda harus memiliki string yang sama dengan string yang ditampilkan oleh
metode getType
.
class myIcon extends Blockly.icons.Icon {
getType() {
return new Blockly.icons.IconType('my_icon');
}
}
Blockly.icons.registry.register(
new Blockly.icons.IconType('my_icon'), myIcon);