程序會封鎖所有參照備份資料模型,這些模型定義了 程序 (名稱、參數和回傳)。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...
}