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