Symbole speichern und laden

Einige Symbole haben einen Status, der gespeichert werden muss, während andere instanziiert werden basierend auf dem aktuellen Zustand. Beispielsweise müssen Kommentarsymbole den Text speichern, Warnsymbole hingegen nicht, da sie basierend auf den Sperrmethoden instanziiert werden. verbunden.

Wenn der Status des Symbols gespeichert werden muss, müssen Sie den ISerializable-Schnittstelle und registrieren Sie Ihr .

Der von deinem Symbol zurückgegebene Status wird in das icons-Attribut deines des Blocks an:

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

Status speichern

Um den Status Ihres Symbols zu speichern, müssen Sie die Methode Methode saveState von ISerializable . Diese Methode kann eine beliebige JSON-Datei zurückgeben, die an Ihre loadState-Methode.

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

Vollständige Serialisierung und Sicherungsdaten

saveState empfängt auch einen optionalen doFullSerialization-Parameter. Dies ist werden von Symbolen verwendet, die auf den Status verweisen, Serializer (wie unterstützende Datenmodelle). Der Parameter signalisiert, Der referenzierte Zustand ist nicht verfügbar, wenn der Block deserialisiert wird, sodass der sollte alle Sicherungsstatus selbst serialisieren. Das ist z. B. der Fall, Ein einzelner Block wird serialisiert oder er wird kopiert und eingefügt.

Zwei häufige Anwendungsfälle hierfür sind:

  • Wenn ein einzelner Block in einen Arbeitsbereich geladen wird, in dem die unterstützenden Daten nicht vorhanden ist, verfügt das Symbol im eigenen Status über genügend Informationen, um um ein neues Datenmodell zu erstellen.
  • Beim Kopieren und Einfügen eines Blocks erstellt das Symbol immer eine neue Sicherung Datenmodell zu verwenden, anstatt auf ein vorhandenes Modell zu verweisen.

Ladestatus

Um den Status Ihres Symbols zu speichern, müssen Sie die Methode Methode loadState von ISerializable . Diese Methode verwendet das von der saveState-Methode zurückgegebene JSON-Format.

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

Symbolklassen registrieren

Schließlich müssen Sie Ihr Symbol registrieren, damit das Serialisierungssystem instanziieren können. Denken Sie daran, dass das IconType, das für die Registrierung Ihres Symbol muss denselben String haben wie der, der von seinem getType-Methode.

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