Salva e carica le icone

Per alcune icone è necessario salvare uno stato, mentre per altre viene creato un'istanza in base allo stato esistente. Ad esempio, le icone dei commenti devono salvare il testo, mentre le icone di avviso no perché vengono create in base al modo in cui sono collegati i blocchi.

Se l'icona deve salvare il proprio stato, devi implementare l'interfaccia ISerializable e register la tua icona.

Lo stato restituito dall'icona viene incluso nella proprietà icons dello 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 saveState dell'interfaccia ISerializable. Questo metodo può restituire un json arbitrario, che viene trasmesso al tuo metodo loadState.

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

Serializzazione e backup completi dei dati

saveState riceve anche un parametro doFullSerialization facoltativo. Viene utilizzato da icone che fanno riferimento allo stato serializzato da un diverso serializzatore (come modelli di dati di supporto). Il parametro indica che lo stato di riferimento non sarà disponibile quando il blocco viene deserializzato, quindi l'icona deve serializzare tutto lo stato di supporto. Ad esempio, questo avviene quando un singolo blocco viene serializzato o quando un blocco viene copiato e incollato.

Ecco due casi d'uso comuni:

  • Quando un singolo blocco viene caricato in un'area di lavoro in cui il modello dei dati di supporto non esiste, l'icona nel suo stato contiene informazioni sufficienti a creare un nuovo modello dei dati.
  • Quando un blocco viene copiato e incollato, l'icona crea sempre un nuovo modello di dati di supporto invece di fare riferimento a uno esistente.

Stato di caricamento

Per salvare lo stato dell'icona, devi implementare il metodo loadState dell'interfaccia ISerializable. Questo metodo acquisisce il JSON restituito dal metodo saveState.

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

Registra classi di icone

Infine, devi registrare l'icona in modo che il sistema di serializzazione possa confermarla. Ricorda che la stringa IconType utilizzata per registrare l'icona deve avere la stessa stringa di quella restituita dal relativo metodo 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);