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