Zapisz i wczytaj ikony

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