Niektóre ikony mają stan, który należy zapisać, a inne są w postaci wystąpienia w zależności od obecnego stanu. Na przykład ikony komentarzy muszą zapisać tekst, Ikony ostrzeżeń nie są wyświetlane, ponieważ są tworzone na podstawie sposobu działania bloków. – podłączono
Jeśli ikona musi zapisać stan, musisz zaimplementować
ISerializable
i zarejestruj
.
Stan zwrócony przez ikonę zostanie uwzględniony we właściwości icons
tagu
stan bloku:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
Zapisz stan
Aby zapisać stan ikony, musisz zaimplementować
Metoda saveState
ISerializable
za pomocą prostego interfejsu online. Ta metoda może zwrócić dowolny plik JSON, który jest przekazywany do
Metoda loadState
.
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
Pełna serializacja i dane kopii zapasowej
Funkcja saveState
otrzymuje też opcjonalny parametr doFullSerialization
. To jest
używane przez ikony odwołujące się do stanu zserializowanego przez inny
serializer (np. zapasowe modele danych). Parametr ten informuje,
wskazany stan nie będzie dostępny, gdy blok zostanie deserializowany, więc
powinna zserializować cały stan kopii zapasowej. Przykład:
gdy pojedynczy blok jest serializowany lub skopiowany i wklejony.
Są to 2 częste przypadki użycia:
- Gdy pojedynczy blok jest wczytywany do obszaru roboczego, w którym dane zapasowe model nie istnieje, ikona ma w swoim stanie wystarczającą ilość informacji, aby w celu utworzenia nowego modelu danych.
- Przy kopiowaniu i wklejaniu bryły ikona zawsze tworzy nową kopię zapasową model danych zamiast odwoływania się do istniejącego.
Stan obciążenia
Aby zapisać stan ikony, musisz zaimplementować
Metoda loadState
ISerializable
za pomocą prostego interfejsu online. Ta metoda pobiera plik JSON zwrócony przez metodę saveState
.
loadState(state) {
this.state = state;
}
Zarejestruj klasy ikon
Na koniec musisz zarejestrować ikonę, aby system serializacji mógł
utworzyć jej instancję. Pamiętaj, że adres IconType
użyty do zarejestrowania
musi mieć taki sam ciąg znaków, jaki został zwrócony przez
Metoda 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);