O procedimento bloqueia todos os modelos de dados de apoio de referência que definem a assinatura procedimento (nome, parâmetros e retorno). Os modelos de dados fornecidos pelo O plug-in @blockly/block-shareable-procedures foi criado para replicar o comportamento dos blocos de procedimentos integrados legados do Blockly.
Isso inclui comportamentos indesejados no seu procedimento personalizado blocos, incluindo:
- Os tipos de retorno não são compatíveis
- Todos os parâmetros estão associados a uma variável global
Se quiser um comportamento diferente, você pode criar seus próprios dados de procedimento personalizado de modelos de machine learning.
Implementação do modelo de procedimento
Seu modelo de dados de procedimento precisa implementar a 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âmetros
Seu modelo de dados de parâmetros precisa implementar a 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...
}
Mudanças no gatilho
Qualquer um dos métodos que acionam alterações no modelo de procedimento também precisa chamar
triggerProceduresUpdate
do
plug-in @blockly/block-shareable-procedures. Isso vai
chame doProcedureUpdate
em qualquer bloco de procedimento, fazendo com que eles se renderizem 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 na O plug-in @blockly/block-shareable-procedures também aciona quando os procedimentos são modificados. Isso permite que vários espaços de trabalho sejam sincronizados e modelos de procedimento que podem ser compartilhados entre eles. Você também pode escolher disparar eventos se você quiser.
Desserialização
Cada uma das classes 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...
}