O procedimento bloqueia todos os modelos de dados de suporte de referência que definem a assinatura do procedimento (nome, parâmetros e retorno). Os modelos de dados fornecidos pelo plug-in @blockly/block-shareable-procedures foram criados para replicar o comportamento dos blocos de procedimentos integrados legados do Blockly.
Isso inclui alguns comportamentos que você talvez não queira para seus blocos de procedimento personalizados, incluindo:
- Tipos de retorno não são compatíveis
- Todos os parâmetros estão associados a uma variável global
Se você quiser um comportamento diferente, crie seus próprios modelos de dados de procedimento personalizados.
Implementação do modelo de procedimento
Seu modelo de dados de procedimento precisa implementar a interface
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...
}
Implementação do modelo de parâmetro
Seu modelo de dados de parâmetro precisa implementar a interface
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...
}
Alterações de gatilho
Qualquer um dos métodos que acionam mudanças no modelo de procedimento também precisa chamar
triggerProceduresUpdate
do plug-in
@blockly/block-shareable-procedures. Isso vai
chamar doProcedureUpdate
em todos os blocos de procedimento, fazendo com que eles sejam renderizados novamente.
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
Os modelos de procedimento no plug-in @blockly/block-shareable-procedures também acionam eventos quando os procedimentos são modificados. Isso permite que vários espaços de trabalho sejam mantidos sincronizados e que modelos de procedimentos sejam compartilhados entre eles. Você também pode acionar eventos se quiser.
Desserialização
Cada classe também precisa de um método static loadState
para oferecer suporte à
desserialização.
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...
}