Crear modelos de datos de procedimiento personalizados

El procedimiento bloquea todos los modelos de datos de copia de seguridad de referencia que definen la firma de el procedimiento (nombre, parámetros y retorno). Los modelos de datos que proporciona el @blockly/block-shareable-procedures están compilados para el comportamiento de los bloques de procedimiento integrados heredados de Blockly.

Esto incluye algunos comportamientos que quizás no desees en tu procedimiento personalizado bloques, entre ellos:

  • No se admiten los tipos de datos que se muestran
  • Todos los parámetros se asocian con una variable global

Si quieres un comportamiento diferente, puedes crear tus propios datos de procedimientos personalizados e implementar modelos automáticamente.

Implementación del modelo de procedimiento

El modelo de datos de procedimientos debe implementar el 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...
}

Implementación de modelos de parámetros

Tu modelo de datos de parámetros debe implementar el 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...
}

Activa los cambios

Cualquiera de los métodos que activan cambios en el modelo de procedimiento también debe llamar triggerProceduresUpdate desde @blockly/block-shareable-procedures. Si confirmas esta acción, Llama a doProcedureUpdate en cualquier bloqueo de procedimiento, lo que hace que se vuelvan a renderizar.

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...
}

Eventos

Los modelos de procedimientos El complemento @blockly/block-shareable-procedures también se activa. eventos cuando se modifican los procedimientos. Esto permite que varios espacios de trabajo y los modelos de procedimientos que se compartirán entre ellos. También puedes elegir para activar eventos, si así lo deseas.

Deserialización

Además, cada una de tus clases necesita un método static loadState para admitir deserialización.

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...
}