创建自定义过程数据模型

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