Créer des modèles de données de procédure personnalisés

Les blocs de procédure font tous référence aux modèles de données sous-jacents qui définissent la signature de la procédure (nom, paramètres et retour). Les modèles de données fournis par le plug-in @blockly/block-shareable-procedures sont conçus pour reproduire le comportement des anciens blocs de procédure intégrés de Blockly.

Cela inclut certains comportements que vous ne souhaitez peut-être pas pour vos blocs de procédure personnalisés, y compris :

  • Les types de retour ne sont pas acceptés
  • Tous les paramètres sont associés à une variable globale.

Si vous souhaitez un comportement différent, vous pouvez créer vos propres modèles de données de procédure personnalisés.

Implémentation du modèle de procédure

Votre modèle de données de procédure doit implémenter l'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...
}

Implémentation du modèle de paramètres

Votre modèle de données de paramètres doit implémenter l'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...
}

Modifications des déclencheurs

Toutes les méthodes qui déclenchent des modifications du modèle de procédure doivent également appeler triggerProceduresUpdate à partir du plug-in @blockly/block-shareable-procedures. Cela appellera doProcedureUpdate sur tous les blocs de procédure, ce qui les fera réafficher.

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

Événements

Les modèles de procédure du plug-in @blockly/block-shareable-procedures déclenchent également des événements lorsque les procédures sont modifiées. Cela permet de synchroniser plusieurs espaces de travail et de partager des modèles de procédure entre eux. Vous pouvez également choisir de déclencher des événements si vous le souhaitez.

Désérialisation

Vos classes ont également besoin d'une méthode static loadState pour prendre en charge la désérialisation.

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