Per alcune icone è presente uno stato che deve essere salvato, mentre per altre viene creata un'istanza in base allo stato esistente. Ad esempio, per salvare il testo delle icone dei commenti, al contrario delle icone di avviso perché vengono create in base al modo in cui i blocchi vengono connesso.
Se devi salvare lo stato dell'icona, devi implementare il metodo
ISerializable
e registra il tuo
.
Lo stato restituito dall'icona viene incluso nella proprietà icons
del tuo
stato del blocco:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
Salva stato
Per salvare lo stato dell'icona, devi implementare il metodo
Metodo saveState
del ISerializable
a riga di comando. Questo metodo può restituire un file json arbitrario, che viene passato al tuo
loadState
.
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
Serializzazione e backup completi dei dati
saveState
riceve anche un parametro doFullSerialization
facoltativo. Questo è
usata da icone che fanno riferimento allo stato serializzato da un
serializzatore (come i modelli dei dati di backup). Il parametro segnala che
lo stato di riferimento non sarà disponibile quando il blocco viene deserializzato, quindi
dovrebbe serializzare tutto lo stato di supporto. Questo, ad esempio, è vero
quando un singolo blocco viene serializzato o quando un blocco viene copiato e incollato.
Due casi d'uso comuni sono:
- Quando un singolo blocco viene caricato in un'area di lavoro in cui i dati di supporto modello non esiste, l'icona ha informazioni sufficienti nel proprio stato per per creare un nuovo modello dei dati.
- Quando un blocco viene copiato e incollato, l'icona crea sempre un nuovo supporto del modello dei dati, invece di farvi riferimento a uno esistente.
Stato di caricamento
Per salvare lo stato dell'icona, devi implementare il metodo
Metodo loadState
del ISerializable
a riga di comando. Questo metodo utilizza il codice JSON restituito dal tuo metodo saveState
.
loadState(state) {
this.state = state;
}
Registra corsi relativi alle icone
Infine devi registrare l'icona in modo che il sistema di serializzazione possa
creare un'istanza. Ricorda che il IconType
utilizzato per registrare i tuoi
icona deve avere la stessa stringa di quella restituita dal
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);