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