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