儲存並載入圖示

某些圖示的狀態需要儲存,其他圖示則會例項化 做出預測舉例來說,註解圖示需要儲存文字 而警告圖示則並非因為根據區塊的 已連線。

如需儲存圖示狀態,則需要導入 ISerializable 介面並註冊 圖示。

圖示傳回的狀態會納入應用程式的 icons 屬性中 區塊的狀態:

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

儲存狀態

如要儲存圖示狀態,您需要導入 ISerializablesaveState 方法 存取 API這個方法可能會傳回任意 json,並傳遞至 loadState 方法。

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

完整序列化與備份資料

saveState 也會收到選用的 doFullSerialization 參數。這是 其他參考狀態的圖示 serializer (例如備份資料模型)。參數會指出 將區塊還原序列化時,系統就無法使用參照狀態,因此 圖示應將所有備份狀態本身序列化。舉例來說, 個別區塊序列化,或複製貼上區塊時。

以下是兩個常見用途:

  • 將個別區塊載入備份資料的工作區時 ,則該圖示本身狀態有足夠的資訊, 建立新的資料模型
  • 複製貼上區塊時,圖示一律會建立新的備份 而非參照現有資料模型

載入狀態

如要儲存圖示狀態,您需要導入 ISerializableloadState 方法 存取 API這個方法會擷取 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);