Kaydet ve simgeleri yükle

Bazı simgelerin kaydedilmesi gereken bir durum varken, diğer simgeler örneklendirilir mevcut duruma göre. Örneğin, yorum simgelerinin metinlerini, ancak uyarı simgeleri, blokların çalışma şekline göre örneklendirildiği için bağlı.

Simgenizin durumunu kaydetmesi gerekiyorsa ISerializable arayüzünüzü kaydettirin simgesini tıklayın.

Simgenizin döndürdüğü durum, cihazınızın icons özelliğine dahil edilir. bloğun durumu:

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

Durumu kaydet

Simgenizin durumunu kaydetmek için ISerializable için saveState yöntemi kullanır. Bu yöntem rastgele bir json döndürebilir ve loadState yöntemini çağırın.

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

Tam serileştirme ve veri yedekleme

saveState ayrıca isteğe bağlı bir doFullSerialization parametresi alır. Bu farklı bir grup tarafından serileştirilmiş duruma referans veren simgeler tarafından kullanılır. serileştirici (ör. yedekleme veri modelleri). Bu parametre, referans verilen durum, blok seri durumdan çıkarıldığında kullanılamaz. Bu nedenle simgesinin tüm yedekleme durumunu serileştirmesi gerekir. Örneğin, bu değer Tek bir blok serileştirildiğinde veya bir blok kopyalanıp yapıştırıldığında.

Bunun için yaygın olarak kullanılan iki kullanım alanı şunlardır:

  • Tek bir blok, yedekleme verilerinin tamamlandığı bir çalışma alanına yüklendiğinde model yoksa simge, kendi durumunda modelin mevcut veri modeli oluşturabilirsiniz.
  • Bir blok kopyalanıp yapıştırıldığında simge her zaman yeni bir destek oluşturur veri modelini kullanır.

Yükleme durumu

Simgenizin durumunu kaydetmek için ISerializable için loadState yöntemi kullanır. Bu yöntem, saveState yönteminiz tarafından döndürülen JSON'u alır.

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

Simge sınıflarını kaydedin

Son olarak, serileştirme sisteminin başarılı bir şekilde çalışması için simgenizi kaydetmeniz gerekir. somutlaştırabiliriz. IconType, alan adınızı kaydetmek için kullanılan simgenin döndürdüğü dizeyle aynı dizeye sahip olması gerekir. getType yöntemini kullanabilirsiniz.

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