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 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);