保存并加载图标

一些图标具有需要保存的状态,而其他图标则是实例化的 进行微调。例如,评论图标需要保存文本, 而警告图标则不会,因为它们是根据块的 已连接。

如果图标需要保存其状态,则需要实现 ISerializable 接口,并注册您的 图标。

图标返回的状态会包含在您的icons 块的状态:

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

保存状态

要保存图标的状态,您需要实现 ISerializablesaveState 方法 界面。此方法可返回任意 JSON,然后将其传递给 loadState 方法结合使用。

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

完整的序列化和后备数据

saveState 还会接收可选的 doFullSerialization 参数。这是 由引用由另一个 序列化器(如支持数据模型)。参数表示 在块被反序列化时,引用的状态将不可用,因此 图标应对所有后备状态本身进行序列化。例如,以下为 true 在序列化单个块或复制粘贴块时。

这有两个常见用例:

  • 当单个块被加载到后备数据的工作区时 模型不存在,则图标自身状态有足够的信息 创建新的数据模型。
  • 复制粘贴文本块时,图标始终会创建新背景 而不是引用现有模型。

加载状态

要保存图标的状态,您需要实现 ISerializableloadState 方法 界面。此方法会接受 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);