一些图标具有需要保存的状态,而其他图标则是实例化的 进行微调。例如,评论图标需要保存文本, 而警告图标则不会,因为它们是根据块的 已连接。
如果图标需要保存其状态,则需要实现
ISerializable
接口,并注册您的
图标。
图标返回的状态会包含在您的icons
块的状态:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
保存状态
要保存图标的状态,您需要实现
ISerializable
的 saveState
方法
界面。此方法可返回任意 JSON,然后将其传递给
loadState
方法结合使用。
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
完整的序列化和后备数据
saveState
还会接收可选的 doFullSerialization
参数。这是
由引用由另一个
序列化器(如支持数据模型)。参数表示
在块被反序列化时,引用的状态将不可用,因此
图标应对所有后备状态本身进行序列化。例如,以下为 true
在序列化单个块或复制粘贴块时。
这有两个常见用例:
- 当单个块被加载到后备数据的工作区时 模型不存在,则图标自身状态有足够的信息 创建新的数据模型。
- 复制粘贴文本块时,图标始终会创建新背景 而不是引用现有模型。
加载状态
要保存图标的状态,您需要实现
ISerializable
的 loadState
方法
界面。此方法会接受 saveState
方法返回的 JSON。
loadState(state) {
this.state = state;
}
注册图标类
最后,您需要注册图标,以便序列化系统可以
实例化。请注意,用于注册您的IconType
必须与图标所返回的字符串相同
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);