Salva e carica le icone

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