Ikon simpan dan muat

Beberapa ikon memiliki status yang perlu disimpan, sementara yang lain dibuat instance-nya berdasarkan status yang sudah ada. Misalnya, ikon komentar perlu menyimpan teks, sedangkan ikon peringatan tidak dipakai karena mereka dibuat instance-nya berdasarkan cara blok terhubung.

Jika ikon Anda perlu menyimpan statusnya, Anda perlu mengimplementasikan ISerializable dan daftarkan ikon.

Status yang ditampilkan oleh ikon Anda disertakan dalam properti icons status blok:

{
  'blocks': {
    'languageVersion': 0,
    'blocks': [
      {
        'type': 'my_block',
        'icons': {
          // Your state goes here!
          'my_icon': 'some state',
        }
      }
    ]
  }
}

Menyimpan status

Untuk menyimpan status ikon, Anda harus mengimplementasikan Metode saveState dari ISerializable dalam antarmuka berbasis web yang sederhana. Metode ini dapat menampilkan json arbitrer, yang diteruskan ke Metode loadState.

saveState() {
  return this.state;  // Some arbirtary JSON-compatible data.
}

Serialisasi lengkap dan data cadangan

saveState juga menerima parameter doFullSerialization opsional. Ini adalah digunakan oleh ikon yang mereferensikan status yang diserialisasi oleh serializer (seperti model data pendukung). Parameter tersebut menandakan bahwa status yang direferensikan tidak akan tersedia ketika blok dideserialisasi, sehingga seharusnya menserialisasi semua status pendukung itu sendiri. Misalnya, ini benar ketika blok individual diserialisasi, atau ketika suatu blok disalin dan ditempel.

Dua kasus penggunaan umum untuk hal ini adalah:

  • Saat blok individual dimuat ke ruang kerja tempat data pendukung model tidak ada, ikon memiliki cukup informasi dalam statusnya sendiri untuk membuat model data baru.
  • Jika suatu blok disalin dan ditempel, ikon akan selalu membuat dukungan baru alih-alih mereferensikan model yang sudah ada.

Status pemuatan

Untuk menyimpan status ikon, Anda harus mengimplementasikan Metode loadState dari ISerializable dalam antarmuka berbasis web yang sederhana. Metode ini menggunakan JSON yang ditampilkan oleh metode saveState Anda.

loadState(state) {
  this.state = state;
}

Mendaftarkan class ikon

Terakhir, Anda perlu mendaftarkan ikon Anda sehingga sistem serialisasi dapat buat instance-nya. Perlu diingat bahwa IconType yang digunakan untuk mendaftarkan ikon harus memiliki string yang sama dengan 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);