Symbole speichern und laden

Einige Symbole haben einen Status, der gespeichert werden muss, während andere basierend auf dem vorhandenen Status instanziiert werden. Kommentarsymbole müssen beispielsweise ihren Text speichern, Warnsymbole hingegen nicht, da sie basierend auf der Verbindung von Blöcken instanziiert werden.

Wenn der Status des Symbols gespeichert werden muss, müssen Sie die Schnittstelle ISerializable implementieren und das Symbol register.

Der vom Symbol zurückgegebene Zustand wird in das Attribut icons des Blockstatus aufgenommen:

{
  '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 saveState der ISerializable-Oberfläche implementieren. Diese Methode kann beliebige JSON-Dateien zurückgeben, die an die Methode loadState übergeben werden.

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

Vollständige Serialisierung und Sicherung von Daten

saveState empfängt außerdem einen optionalen doFullSerialization-Parameter. Dies wird von Symbolen verwendet, die auf Status verweisen, die von einem anderen Serializer (z. B. unterstützende Datenmodelle) serialisiert wurden. Der Parameter signalisiert, dass der referenzierte Zustand nicht verfügbar ist, wenn der Block deserialisiert wird. Daher sollte das Symbol den gesamten Sicherungsstatus selbst serialisieren. Dies gilt beispielsweise, wenn ein einzelner Block serialisiert oder ein Block kopiert und eingefügt wird.

Zwei häufige Anwendungsfälle sind:

  • Wenn ein einzelner Block in einen Arbeitsbereich geladen wird, in dem das unterstützende Datenmodell nicht vorhanden ist, verfügt das Symbol über genügend Informationen in seinem eigenen Zustand, um ein neues Datenmodell zu erstellen.
  • Wenn ein Block kopiert und eingefügt wird, erstellt das Symbol immer ein neues unterstützendes Datenmodell, anstatt auf ein vorhandenes Modell zu verweisen.

Ladestatus

Um den Status Ihres Symbols zu speichern, müssen Sie die Methode loadState der ISerializable-Oberfläche implementieren. Diese Methode übernimmt den JSON-Code, der von der Methode saveState zurückgegeben wird.

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

Symbolklassen registrieren

Schließlich müssen Sie Ihr Symbol registrieren, damit es vom Serialisierungssystem instanziiert werden kann. Denken Sie daran, dass das zum Registrieren Ihres Symbols verwendete IconType denselben String haben muss wie der String, der von der Methode getType zurückgegeben wird.

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