Enregistrer et charger les icônes

Certaines icônes ont un état qui doit être enregistré, tandis que d'autres sont instanciés en fonction de l'état existant. Par exemple, les icônes de commentaire doivent enregistrer leur texte, contrairement aux icônes d'avertissement, car elles sont instanciées selon la façon dont les blocs connectés.

Si votre icône doit enregistrer son état, vous devez implémenter la fonction ISerializable et enregistrez votre .

L'état renvoyé par votre icône est inclus dans la propriété icons de votre l'état du bloc:

{
  'blocks': {
    'languageVersion': 0,
    'blocks': [
      {
        'type': 'my_block',
        'icons': {
          // Your state goes here!
          'my_icon': 'some state',
        }
      }
    ]
  }
}

Enregistrer l'état

Pour enregistrer l'état de votre icône, vous devez implémenter la fonction Méthode saveState du ISerializable de commande. Cette méthode peut renvoyer un fichier JSON arbitraire, qui est transmis à votre loadState.

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

Sérialisation complète et données de sauvegarde

saveState reçoit également un paramètre doFullSerialization facultatif. C'est utilisées par les icônes qui font référence à un état sérialisé par une autre sérialiseur (comme les modèles de données de sauvegarde). Le paramètre indique que l'état référencé n'est pas disponible lorsque le bloc est désérialisé. Par conséquent, doit sérialiser tout l'état de support lui-même. Par exemple, c'est vrai lorsqu'un bloc individuel est sérialisé ou lorsqu'un bloc est copié-collé.

Voici deux cas d'utilisation courants:

  • Lorsqu'un bloc individuel est chargé dans un espace de travail où les données de sauvegarde n'existe pas, l'icône dispose de suffisamment d'informations dans son propre état pour créer un modèle de données.
  • Lorsqu'un bloc est copié-collé, l'icône crée toujours un nouveau support au lieu de référencer un modèle existant.

État du chargement

Pour enregistrer l'état de votre icône, vous devez implémenter la fonction Méthode loadState du ISerializable de commande. Cette méthode récupère le fichier JSON renvoyé par votre méthode saveState.

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

Enregistrer des classes d'icônes

Enfin, vous devez enregistrer votre icône afin que le système de sérialisation l'instancier. N'oubliez pas que le IconType utilisé pour enregistrer votre l'icône doit avoir la même chaîne que celle renvoyée par son 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);