Membuat model data prosedur kustom

Prosedur memblokir semua model data pendukung referensi yang menentukan tanda tangan prosedur (nama, parameter, dan hasil). Model data yang disediakan oleh Plugin @blockly/block-shareable-procedures dibuat untuk mereplikasi perilaku blok prosedur {i> built-in<i} lama dari Blockly.

Ini termasuk beberapa perilaku yang mungkin tidak Anda inginkan untuk prosedur khusus Anda yang diblokir, termasuk:

  • Jenis nilai yang ditampilkan tidak didukung
  • Semua parameter dikaitkan dengan variabel global

Jika Anda menginginkan perilaku yang berbeda, Anda dapat membuat data prosedur khusus Anda sendiri jaringan.

Implementasi model prosedur

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

Pemicu perubahan

Salah satu 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, yang menyebabkannya 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 dalam Plugin @blockly/block-shareable-procedures juga diaktifkan peristiwa ketika prosedur dimodifikasi. Hal ini memungkinkan beberapa ruang kerja tetap sinkron, dan model prosedur untuk dibagikan di seluruh mereka. Anda juga dapat memilih untuk mengaktifkan peristiwa jika Anda mau.

Deserialisasi

Setiap kelas Anda juga memerlukan metode static loadState untuk mendukung proses 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...
}