Criar modelos de dados de procedimentos personalizados

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

Isso inclui comportamentos indesejados no seu procedimento personalizado blocos, incluindo:

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

Se quiser um comportamento diferente, você pode criar seus próprios dados de procedimento personalizado de modelos de machine learning.

Implementação do modelo de procedimento

Seu modelo de dados de procedimento precisa implementar a 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âmetros

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

Mudanças no gatilho

Qualquer um dos métodos que acionam alterações no modelo de procedimento também precisa chamar triggerProceduresUpdate do plug-in @blockly/block-shareable-procedures. Isso vai chame doProcedureUpdate em qualquer bloco de procedimento, fazendo com que eles se renderizem 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 na O plug-in @blockly/block-shareable-procedures também aciona quando os procedimentos são modificados. Isso permite que vários espaços de trabalho sejam sincronizados e modelos de procedimento que podem ser compartilhados entre eles. Você também pode escolher disparar eventos se você quiser.

Desserialização

Cada uma das classes 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...
}