In Prozedurblöcken wird auf alle zugrunde liegenden Datenmodelle verwiesen, die die Signatur der Prozedur definieren (Name, Parameter und Rückgabe). Die Datenmodelle des Plugins @blockly/block-shareable-procedures sind so konzipiert, dass sie das Verhalten der alten integrierten Prozedurblöcke von Blockly nachbilden.
Dazu gehört auch Verhalten, das Sie für Ihre benutzerdefinierten Prozedurblöcke möglicherweise nicht wünschen, z. B.:
- Rückgabetypen werden nicht unterstützt
- Alle Parameter sind einer globalen Variablen zugeordnet.
Wenn Sie ein anderes Verhalten wünschen, können Sie eigene benutzerdefinierte Datenmodelle für Verfahren erstellen.
Implementierung des Verfahrensmodells
Ihr Verfahrensdatenmodell muss die IProcedureModel
-Schnittstelle implementieren.
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...
}
Implementierung des Parametermodells
Ihr Parameterdatenmodell muss die Schnittstelle IParameterModel
implementieren.
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...
}
Trigger-Änderungen
Bei allen Methoden, die Änderungen am Prozedurmodell auslösen, sollte auch triggerProceduresUpdate
aus dem Plugin @blockly/block-shareable-procedures aufgerufen werden. Dadurch wird doProcedureUpdate
für alle Prozedurblöcke aufgerufen, sodass sie neu gerendert werden.
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...
}
Ereignisse
Die Prozedurmodelle im Plugin @blockly/block-shareable-procedures lösen auch Ereignisse aus, wenn die Prozeduren geändert werden. So können mehrere Arbeitsbereiche synchronisiert und Prozedurmodelle für sie freigegeben werden. Sie können auch festlegen, dass Ereignisse ausgelöst werden sollen.
Deserialisierung
Ihre Klassen benötigen außerdem jeweils eine static loadState
-Methode zur Unterstützung der Deserialisierung.
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...
}