Criar modelos de dados de procedimentos personalizados

O procedimento bloqueia todos os modelos de dados de suporte de referência que definem a assinatura do procedimento (nome, parâmetros e retorno). Os modelos de dados fornecidos pelo plug-in @blockly/block-shareable-procedures foram criados para replicar o comportamento dos blocos de procedimentos integrados legados do Blockly.

Isso inclui alguns comportamentos que você talvez não queira para seus blocos de procedimento personalizados, incluindo:

  • Tipos de retorno não são compatíveis
  • Todos os parâmetros estão associados a uma variável global

Se você quiser um comportamento diferente, crie seus próprios modelos de dados de procedimento personalizados.

Implementação do modelo de procedimento

Seu modelo de dados de procedimento precisa implementar a interface 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...
}

Implementação do modelo de parâmetro

Seu modelo de dados de parâmetro precisa implementar a interface 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...
}

Alterações de gatilho

Qualquer um dos métodos que acionam mudanças no modelo de procedimento também precisa chamar triggerProceduresUpdate do plug-in @blockly/block-shareable-procedures. Isso vai chamar doProcedureUpdate em todos os blocos de procedimento, fazendo com que eles sejam renderizados novamente.

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

Os modelos de procedimento no plug-in @blockly/block-shareable-procedures também acionam eventos quando os procedimentos são modificados. Isso permite que vários espaços de trabalho sejam mantidos sincronizados e que modelos de procedimentos sejam compartilhados entre eles. Você também pode acionar eventos se quiser.

Desserialização

Cada classe também precisa de um método static loadState para oferecer suporte à desserialização.

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