Membuat model data prosedur kustom

Blok prosedur semua model data pendukung referensi yang menentukan tanda tangan prosedur (nama, parameter, dan nilai yang ditampilkan). Model data yang disediakan oleh plugin @blockly/block-shareable-procedures dibuat untuk mereplikasi perilaku blok prosedur bawaan lama Blockly.

Hal ini mencakup beberapa perilaku yang mungkin tidak Anda inginkan untuk blok prosedur kustom, termasuk:

  • Jenis pengembalian tidak didukung
  • Semua parameter dikaitkan dengan variabel global

Jika menginginkan perilaku yang berbeda, Anda dapat membuat model data prosedur kustom sendiri.

Implementasi model prosedur

Model data prosedur Anda harus menerapkan antarmuka 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...
}

Implementasi model parameter

Model data parameter Anda harus menerapkan antarmuka 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...
}

Perubahan pemicu

Setiap metode yang memicu perubahan pada model prosedur juga harus memanggil triggerProceduresUpdate dari plugin @blockly/block-shareable-procedures. Hal ini akan memanggil doProcedureUpdate pada blok prosedur apa pun, sehingga menyebabkan blok tersebut dirender ulang.

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

Acara

Model prosedur di plugin @blockly/block-shareable-procedures juga memicu peristiwa saat prosedur diubah. Hal ini memungkinkan beberapa ruang kerja tetap disinkronkan, dan model prosedur dibagikan di seluruh ruang kerja tersebut. Anda juga dapat memilih untuk memicu peristiwa jika mau.

Deserialisasi

Setiap class Anda juga memerlukan metode static loadState untuk mendukung deserialisasi.

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