Procedura blokuje wszystkie referencyjne modele danych bazowych, które definiują podpis procedury (nazwa, parametry i zwrot). Modele danych udostępnione przez Wtyczka @blockly/block-shareable-procedures została stworzona, powiela działanie starszych wbudowanych bloków procedur Blockly.
Obejmuje to pewne zachowania, których możesz nie chcieć w swojej procedurze niestandardowej bloki, w tym:
- Typy zwrotów nie są obsługiwane
- Wszystkie parametry są powiązane ze zmienną globalną
Jeśli chcesz zastosować inny sposób działania, możesz utworzyć własne dane procedury niestandardowej. modeli ML.
Implementacja modelu procedury
Model danych procedur 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 parametrów 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 aktywatorów
Każda z metod, które wywołują zmiany w modelu procedur, powinna również wywoływać metodę
triggerProceduresUpdate
w
Wtyczka @blockly/block-shareable-procedures. Dzięki temu
wywołuje metodę doProcedureUpdate
w żadnych blokach procedury, co powoduje 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 Wtyczka @blockly/block-shareable-procedures też się uruchamia zdarzeń, jeśli procedury są zmodyfikowane. Dzięki temu można utworzyć wiele synchronizowane oraz udostępniane między nimi modele procedur. Możesz też wybrać aby uruchamiać zdarzenia.
Deserializacja
Każda z Twoich zajęć musi też obsługiwać metodę static loadState
deserializacja.
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...
}