El procedimiento bloquea todos los modelos de datos de copia de seguridad de referencia que definen la firma de el procedimiento (nombre, parámetros y retorno). Los modelos de datos que proporciona el @blockly/block-shareable-procedures están compilados para el comportamiento de los bloques de procedimiento integrados heredados de Blockly.
Esto incluye algunos comportamientos que quizás no desees en tu procedimiento personalizado bloques, entre ellos:
- No se admiten los tipos de datos que se muestran
- Todos los parámetros se asocian con una variable global
Si quieres un comportamiento diferente, puedes crear tus propios datos de procedimientos personalizados e implementar modelos automáticamente.
Implementación del modelo de procedimiento
El modelo de datos de procedimientos debe implementar el 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 de modelos de parámetros
Tu modelo de datos de parámetros debe implementar el 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...
}
Activa los cambios
Cualquiera de los métodos que activan cambios en el modelo de procedimiento también debe llamar
triggerProceduresUpdate
desde
@blockly/block-shareable-procedures. Si confirmas esta acción,
Llama a doProcedureUpdate
en cualquier bloqueo de procedimiento, lo que hace que se vuelvan 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 El complemento @blockly/block-shareable-procedures también se activa. eventos cuando se modifican los procedimientos. Esto permite que varios espacios de trabajo y los modelos de procedimientos que se compartirán entre ellos. También puedes elegir para activar eventos, si así lo deseas.
Deserialización
Además, cada una de tus clases necesita un método static loadState
para admitir
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...
}