Die Prozedur blockiert alle Referenzdatenmodelle, die die Signatur von der Prozedur (Name, Parameter und Rückgabe). Die Datenmodelle der @blockly/block-shareable-procedures-Plug-ins wurden entwickelt, um das Verhalten der Legacy-integrierten Prozedurblöcke von Blockly zu replizieren.
Dies umfasst einige Verhaltensweisen, die Sie möglicherweise nicht für Ihre benutzerdefinierte Prozedur wünschen Blöcken, darunter:
- Rückgabetypen werden nicht unterstützt
- Alle Parameter sind einer globalen Variablen zugeordnet
Wenn Sie ein anderes Verhalten wünschen, können Sie Ihre eigenen benutzerdefinierten Prozedurdaten erstellen Modelle.
Implementierung des Prozedurmodells
Ihr Prozedurdatenmodell muss die 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...
}
Implementierung des Parametermodells
Ihr Parameterdatenmodell muss die IParameterModel verwendet.
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...
}
Änderungen auslösen
Alle Methoden, die Änderungen am Prozedurmodell auslösen, sollten auch Folgendes aufrufen:
triggerProceduresUpdate
vom
@blockly/block-shareable-procedures. Dadurch wird
doProcedureUpdate
für alle Prozedurblocks aufrufen, wodurch sie noch einmal 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 in der Das Plug-in @blockly/block-shareable-procedures wird ebenfalls ausgelöst wenn die Verfahren geändert werden. So können mehrere Arbeitsbereiche synchronisiert und Prozedurmodelle zur gemeinsamen Nutzung freigegeben. Sie können auch um Ereignisse auszulösen.
Deserialisierung
Ihre Klassen benötigen außerdem jeweils eine static loadState
-Methode zur Unterstützung
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...
}