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