El procedimiento bloquea todos los modelos de datos de respaldo de referencia que definen la firma del procedimiento (nombre, parámetros y devolución). Los modelos de datos que proporciona el complemento @blockly/block-shareable-procedures se compilan para replicar el comportamiento de los bloques de procedimientos integrados heredados de Blockly.
Esto incluye algunos comportamientos que tal vez no desees para tus bloques de procedimientos personalizados, como los siguientes:
- No se admiten los tipos de devolución
- Todos los parámetros están asociados a una variable global.
Si deseas un comportamiento diferente, puedes crear tus propios modelos de datos de procedimientos personalizados.
Implementación del modelo de procedimiento
Tu modelo de datos de procedimiento debe implementar la interfaz 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...
}
Implementación del modelo de parámetros
Tu modelo de datos de parámetros debe implementar la interfaz 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...
}
Cambios en los activadores
Cualquiera de los métodos que activen cambios en el modelo de procedimiento también deben llamar a triggerProceduresUpdate
desde el complemento @blockly/block-shareable-procedures. Esto llamará a doProcedureUpdate
en cualquier bloque de procedimiento, lo que hará que se vuelva a renderizar.
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...
}
Eventos
Los modelos de procedimientos en el complemento @blockly/block-shareable-procedures también activan eventos cuando se modifican los procedimientos. Esto permite que varios espacios de trabajo se mantengan sincronizados y que los modelos de procedimientos se compartan entre ellos. También puedes activar eventos si lo deseas.
Deserialización
Cada una de tus clases también necesita un método static loadState
para admitir la deserialización.
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...
}