建立自訂程序資料模型

程序會封鎖所有參照備份資料模型,這些模型定義了 程序 (名稱、參數和回傳)。BigQuery 提供的資料模型 @blockly/block-shareable-procedures 外掛程式 複製 Blockly 舊版內建程序區塊的行為。

這包含您可能不希望透過自訂程序執行的某些行為 封鎖,包括:

  • 不支援傳回類型
  • 所有參數都與全域變數相關聯

如果您需要其他行為,可以建立自訂程序資料 我們來看評估分類模型成效時 的喚回度和精確度指標

程序模型實作

您的程序資料模型必須 IProcedureModel 介面。

class MyProcedureModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;

    // Note: construction should not add the model to the procedure map.
  },

  // Other methods are omitted for brevity...
}

參數模型實作

您的參數資料模型必須 IParameterModel 介面。

class MyParameterModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;
  },

  setProcedureModel(model) {
    this.model =  model;
    return this;
  }

  // Other methods are omitted for brevity...
}

觸發條件變更

任何會觸發程序模型變更的方法也應呼叫 triggerProceduresUpdate@blockly/block-shareable-procedures 外掛程式。這將 對任何程序區塊呼叫 doProcedureUpdate,使其重新算繪。

import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';

class MyProcedureModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

活動

上述程序中的 @blockly/block-shareable-procedures 外掛程式也會啟動 事件。這樣一來,您就能建立多個工作區 保持在同步狀態,以及在模型之間共用程序模型。您也可以選擇 來觸發事件

反序列化

您的類別也都需要支援的 static loadState 方法 以及去序列化。

class MyProcedureModel {
  static loadState(state, workspace) {
    // Note that the procedure model should not deserialize parameters.
    // The deserializer will handle that.
    return new MyProcedureModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  static loadState(state, workspace) {
    return new MyParameterModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}