Procedura blokuje wszystkie modele danych zaplecza, które definiują sygnaturę procedury (nazwę, parametry i wartość zwracaną). Modele danych udostępniane przez wtyczkę @blockly/block-shareable-procedures zostały opracowane w celu odtworzenia działania starszych wbudowanych bloków procedur Blockly.
Obejmuje to niektóre zachowania, które mogą być niepożądane w przypadku bloków procedur niestandardowych, np.:
- Typy zwracanych wartości nie są obsługiwane
- Wszystkie parametry są powiązane ze zmienną globalną
Jeśli chcesz uzyskać inne działanie, możesz utworzyć własne niestandardowe modele danych procedur.
Implementacja modelu procedury
Model danych procedury 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 parametru 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 reguły
Każda z metod, która wywołuje zmiany w modelu procedury, powinna też wywoływać triggerProceduresUpdate
z wtyczki @blockly/block-shareable-procedures. Spowoduje to wywołanie doProcedureUpdate
w przypadku wszystkich bloków procedur, co spowoduje ich 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 pluginie @blockly/block-shareable-procedures również wywołują zdarzenia, gdy procedury są modyfikowane. Dzięki temu można synchronizować wiele obszarów roboczych i udostępniać w nich modele procedur. Możesz też w razie potrzeby wywoływać zdarzenia.
Deserializacja
Każda klasa musi też mieć metodę static loadState
, która obsługuje deserializację.
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...
}