Creazione di modelli di dati delle procedure personalizzate

La procedura blocca tutti i modelli di dati di supporto dei riferimenti che definiscono la firma della procedura (nome, parametri e valore restituito). I modelli di dati forniti dal plug-in @blockly/block-shareable-procedures sono progettati per replicare il comportamento dei blocchi di procedure integrati legacy di Blockly.

Ciò include alcuni comportamenti che potresti non volere per i tuoi blocchi di procedure personalizzate, 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 modelli di dati delle procedure personalizzati.

Implementazione del modello di procedura

Il modello di dati della procedura deve implementare l'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 dati dei parametri deve implementare l'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...
}

Modifiche al trigger

Qualsiasi metodo che attiva modifiche al modello di procedura deve chiamare anche triggerProceduresUpdate dal plug-in @blockly/block-shareable-procedures. In questo modo doProcedureUpdate viene chiamato su tutti i blocchi di procedure, causando il loro nuovo 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 nel plug-in @blockly/block-shareable-procedures attivano anche eventi quando le procedure vengono modificate. In questo modo, più spazi di lavoro possono essere mantenuti sincronizzati e i modelli di procedure possono essere condivisi tra loro. Se vuoi, puoi anche scegliere di attivare gli eventi.

Deserializzazione

Anche le classi devono avere un metodo static loadState per supportare 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...
}