Salvar e carregar ícones

Alguns ícones têm um estado que precisa ser salvo, enquanto outros são instanciados com base no estado atual. Por exemplo, ícones de comentário precisam salvar o texto, enquanto os ícones de aviso não são, porque eles são instanciados com base em como os blocos são conectados.

Se o ícone precisar salvar seu estado, será necessário implementar a interface do ISerializable e registre suas ícone.

O estado retornado pelo ícone é incluído na propriedade icons do seu do bloco:

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

Salvar estado

Para salvar o estado do seu ícone, é necessário implementar a propriedade Método saveState da ISerializable interface gráfica do usuário. Esse método pode retornar JSON arbitrário, que é transmitido ao seu loadState.

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

Serialização completa e dados de backup

saveState também recebe um parâmetro doFullSerialization opcional. Isso é usados por ícones que fazem referência a um estado serializado por uma serializer (como modelos de dados de apoio). O parâmetro indica que o estado referenciado não estará disponível quando o bloco for desserializado, então o deve serializar todo o estado de apoio. Por exemplo, isso é verdadeiro quando um bloco individual é serializado ou quando um bloco é copiado e colado.

Dois casos de uso comuns para isso são:

  • Quando um bloco individual é carregado em um espaço de trabalho em que os dados de apoio modelo não existe, o ícone tem informações suficientes em seu próprio estado para criar um novo modelo de dados.
  • Quando um bloco é copiado e colado, o ícone sempre cria um novo apoio. modelo de dados em vez de referenciar um que já existe.

Estado de carregamento

Para salvar o estado do seu ícone, é necessário implementar a propriedade Método loadState da ISerializable interface gráfica do usuário. Esse método recebe o JSON retornado pelo método saveState.

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

Registrar classes de ícones

Por fim, você precisa registrar seu ícone para que o sistema de serialização possa instancie-o. Não se esqueça de que o IconType era usado para registrar ícone precisa ter a mesma string que o retornado por seu 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);