Benutzerdefinierte Prozedurdatenmodelle erstellen

Die Prozedur blockiert alle Referenzdatenmodelle, die die Signatur von der Prozedur (Name, Parameter und Rückgabe). Die Datenmodelle der @blockly/block-shareable-procedures-Plug-ins wurden entwickelt, um das Verhalten der Legacy-integrierten Prozedurblöcke von Blockly zu replizieren.

Dies umfasst einige Verhaltensweisen, die Sie möglicherweise nicht für Ihre benutzerdefinierte Prozedur wünschen Blöcken, darunter:

  • Rückgabetypen werden nicht unterstützt
  • Alle Parameter sind einer globalen Variablen zugeordnet

Wenn Sie ein anderes Verhalten wünschen, können Sie Ihre eigenen benutzerdefinierten Prozedurdaten erstellen Modelle.

Implementierung des Prozedurmodells

Ihr Prozedurdatenmodell muss die 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...
}

Implementierung des Parametermodells

Ihr Parameterdatenmodell muss die IParameterModel verwendet.

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

Änderungen auslösen

Alle Methoden, die Änderungen am Prozedurmodell auslösen, sollten auch Folgendes aufrufen: triggerProceduresUpdate vom @blockly/block-shareable-procedures. Dadurch wird doProcedureUpdate für alle Prozedurblocks aufrufen, wodurch sie noch einmal gerendert werden.

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

Ereignisse

Die Prozedurmodelle in der Das Plug-in @blockly/block-shareable-procedures wird ebenfalls ausgelöst wenn die Verfahren geändert werden. So können mehrere Arbeitsbereiche synchronisiert und Prozedurmodelle zur gemeinsamen Nutzung freigegeben. Sie können auch um Ereignisse auszulösen.

Deserialisierung

Ihre Klassen benötigen außerdem jeweils eine static loadState-Methode zur Unterstützung Deserialisierung.

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