Algunos íconos tienen un estado que se debe guardar, mientras que otros tienen una instancia. según el estado existente. Por ejemplo, los iconos de comentarios deben guardar el texto, mientras que los íconos de advertencia no lo hacen, porque se crean instancias de ellos en función de cómo se crean los bloques. conectado.
Si necesitas guardar su estado, debes implementar el
ISerializable
y registra tu
ícono.
El estado que muestra el ícono se incluye en la propiedad icons
de tu
estado del bloque:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
Guardar estado
Para guardar el estado de tu ícono, debes implementar el
Método saveState
de ISerializable
interfaz de usuario. Este método puede mostrar un JSON arbitrario, que se pasa a tu
loadState
.
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
Datos de serialización y copia de seguridad completos
saveState
también recibe un parámetro doFullSerialization
opcional. Este es
usado por iconos que hacen referencia al estado serializado por una dirección
serializador (como modelos de datos de copia de seguridad). El parámetro indica que
el estado al que se hace referencia no estará disponible cuando se deserialice el bloque.
debe serializar todo el estado de la copia de seguridad. Por ejemplo, esto es cierto
cuando un bloque individual se serializa o cuando un bloque se copia y pega.
Dos casos de uso comunes para esto son los siguientes:
- Cuando se carga un bloque individual en un espacio de trabajo en el que los datos de copia de seguridad no existe, el ícono tiene suficiente información en su propio estado para para crear un modelo de datos nuevo.
- Cuando se copia un bloque y se pega, el ícono siempre crea una copia de seguridad nueva en lugar de hacer referencia a uno existente.
Estado de carga
Para guardar el estado de tu ícono, debes implementar el
Método loadState
de ISerializable
interfaz de usuario. Este método toma el JSON que muestra tu método saveState
.
loadState(state) {
this.state = state;
}
Cómo registrar clases de íconos
Por último, debes registrar tu ícono para que el sistema de serialización pueda
crear una instancia de ella. Recuerda que el IconType
que se usó para registrar tu
el ícono debe tener la misma cadena que la que muestra su
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);