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