Kaydet ve simgeleri yükle

Bazı simgeler kaydedilmesi gereken durumlara sahipken, bazıları mevcut duruma göre örneklendirilir. Örneğin, yorum simgelerinin metinlerini kaydetmeleri gerekirken uyarı simgeleri bunları kaydetmemelidir. Çünkü bunlar, engellemelerin bağlanma şekline göre örneklendirilir.

Simgenizin durumunu kaydetmesi gerekiyorsa ISerializable arayüzünü uygulamanız ve simgenizi register gerekir.

Simgenizin döndürdüğü durum, blokunuzun durumunun icons özelliğine dahil edilir:

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

Durumu kaydet

Simgenizin durumunu kaydetmek için ISerializable arayüzünün saveState yöntemini uygulamanız gerekir. Bu yöntem, loadState yönteminize aktarılan rastgele json döndürebilir.

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

Tam serileştirme ve veri yedekleme

saveState, isteğe bağlı bir doFullSerialization parametresi de alır. Bu, farklı bir serileyici tarafından serileştirilmiş duruma referans veren simgeler (yedek veri modelleri gibi) tarafından kullanılır. Parametre, blok seri durumdan çıkarıldığında referans verilen durumun kullanılamayacağını belirtir. Bu nedenle, simgenin tüm yedekleme durumunu seri hale getirmesi gerekir. Örneğin bu, tek bir blok serileştirildiğinde veya bir blok kopyalayıp yapıştırıldığında geçerlidir.

Bunun iki yaygın kullanım alanı vardır:

  • Yedekleme veri modelinin bulunmadığı bir çalışma alanına tek bir blok yüklendiğinde, simge yeni bir veri modeli oluşturmak için kendi durumunda yeterli bilgiye sahip olur.
  • Bir blok kopyalayıp yapıştırıldığında simge, mevcut bir bloka referans vermek yerine her zaman yeni bir yedekleme veri modeli oluşturur.

Yükleme durumu

Simgenizin durumunu kaydetmek için ISerializable arayüzünün loadState yöntemini uygulamanız gerekir. Bu yöntem, saveState yönteminizin döndürdüğü JSON'u alır.

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

Simge sınıflarını kaydet

Son olarak, serileştirme sisteminin simgeyi başlatabilmesi için simgenizi kaydetmeniz gerekir. Simgenizi kaydetmek için kullanılan IconType değerinin, getType yöntemi tarafından döndürülen dizeye sahip olması gerektiğini unutmayın.

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