Tworzenie niestandardowych modeli danych procedur

Procedura blokuje wszystkie referencyjne modele danych bazowych, które definiują podpis procedury (nazwa, parametry i zwrot). Modele danych udostępnione przez Wtyczka @blockly/block-shareable-procedures została stworzona, powiela działanie starszych wbudowanych bloków procedur Blockly.

Obejmuje to pewne zachowania, których możesz nie chcieć w swojej procedurze niestandardowej bloki, w tym:

  • Typy zwrotów nie są obsługiwane
  • Wszystkie parametry są powiązane ze zmienną globalną

Jeśli chcesz zastosować inny sposób działania, możesz utworzyć własne dane procedury niestandardowej. modeli ML.

Implementacja modelu procedury

Model danych procedur 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 parametrów 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 aktywatorów

Każda z metod, które wywołują zmiany w modelu procedur, powinna również wywoływać metodę triggerProceduresUpdate w Wtyczka @blockly/block-shareable-procedures. Dzięki temu wywołuje metodę doProcedureUpdate w żadnych blokach procedury, co powoduje 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 Wtyczka @blockly/block-shareable-procedures też się uruchamia zdarzeń, jeśli procedury są zmodyfikowane. Dzięki temu można utworzyć wiele synchronizowane oraz udostępniane między nimi modele procedur. Możesz też wybrać aby uruchamiać zdarzenia.

Deserializacja

Każda z Twoich zajęć musi też obsługiwać metodę static loadState deserializacja.

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