Tworzenie niestandardowych modeli danych procedur

Procedura blokuje wszystkie modele danych zaplecza, które definiują sygnaturę procedury (nazwę, parametry i wartość zwracaną). Modele danych udostępniane przez wtyczkę @blockly/block-shareable-procedures zostały opracowane w celu odtworzenia działania starszych wbudowanych bloków procedur Blockly.

Obejmuje to niektóre zachowania, które mogą być niepożądane w przypadku bloków procedur niestandardowych, np.:

  • Typy zwracanych wartości nie są obsługiwane
  • Wszystkie parametry są powiązane ze zmienną globalną

Jeśli chcesz uzyskać inne działanie, możesz utworzyć własne niestandardowe modele danych procedur.

Implementacja modelu procedury

Model danych procedury musi implementować interfejs 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...
}

Implementacja modelu parametrów

Model danych parametru musi implementować interfejs 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...
}

Zmiany reguły

Każda z metod, która wywołuje zmiany w modelu procedury, powinna też wywoływać triggerProceduresUpdate z wtyczki @blockly/block-shareable-procedures. Spowoduje to wywołanie doProcedureUpdate w przypadku wszystkich bloków procedur, co spowoduje ich ponowne renderowanie.

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

Wydarzenia

Modele procedur w pluginie @blockly/block-shareable-procedures również wywołują zdarzenia, gdy procedury są modyfikowane. Dzięki temu można synchronizować wiele obszarów roboczych i udostępniać w nich modele procedur. Możesz też w razie potrzeby wywoływać zdarzenia.

Deserializacja

Każda klasa musi też mieć metodę static loadState, która obsługuje deserializację.

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