Íconos de guardar y cargar

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