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

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

Cela inclut certains comportements que vous ne souhaitez peut-être pas adopter pour votre procédure personnalisée 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 données de procédure personnalisée des modèles de ML.

Implémentation du modèle de procédure

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

Déclencher des modifications

Toutes les méthodes qui déclenchent des modifications du modèle de procédure doivent également appeler triggerProceduresUpdate dans le Plug-in @blockly/block-shareable-procedures. Cela permettra appelez doProcedureUpdate sur tous les blocs de procédure, ce qui entraîne un nouveau rendu.

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 Le plug-in @blockly/block-shareable-procedures se déclenche également des événements lorsque les procédures sont modifiées. Cela permet d'utiliser plusieurs espaces de travail garder synchronisés et les modèles de procédure à partager entre eux. Vous pouvez également choisir déclencher des événements si vous le souhaitez.

Désérialisation

Vos classes ont aussi chacune besoin d'une méthode static loadState pour prendre en charge 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...
}