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