过程会阻止所有定义签名特征的参考支持数据模型 过程(名称、参数和返回)。由 Kubernetes 提供的数据模型 @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...
}