Creazione di modelli di dati delle procedure personalizzate

La procedura blocca tutti i modelli dei dati di supporto di riferimento che definiscono la firma la procedura (nome, parametri e invio). I modelli di dati forniti Il plug-in @blockly/block-shareable-procedures è progettato per replicare il comportamento dei blocchi delle procedure integrate legacy di Blockly.

Sono inclusi alcuni comportamenti indesiderati per la procedura personalizzata. blocchi, tra cui:

  • I tipi di reso non sono supportati
  • Tutti i parametri sono associati a una variabile globale

Se vuoi un comportamento diverso, puoi creare i tuoi dati di procedura personalizzata di grandi dimensioni.

Implementazione del modello di procedura

Il modello dei dati della procedura deve implementare Interfaccia 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...
}

Implementazione del modello di parametri

Il modello di dati dei parametri deve implementare il parametro Interfaccia 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...
}

Attiva modifiche

Anche tutti i metodi che attivano le modifiche al modello di procedura devono chiamare triggerProceduresUpdate da Plug-in @blockly/block-shareable-procedures. In questo modo chiamare doProcedureUpdate su qualsiasi blocco di procedura, causandone il rendering.

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

Eventi

I modelli di procedura Viene attivato anche il plug-in @blockly/block-shareable-procedures degli eventi quando le procedure vengono modificate. In questo modo, più aree di lavoro sincronizzati e i modelli di procedura da condividere tra di loro. Puoi anche scegliere per attivare eventi.

Deserializzazione

Inoltre, ciascuno dei tuoi corsi deve avere un metodo static loadState a scopo di supporto la deserializzazione.

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