La procedura blocca tutti i modelli di dati di supporto dei riferimenti che definiscono la firma della procedura (nome, parametri e valore restituito). I modelli di dati forniti dal plug-in @blockly/block-shareable-procedures sono progettati per replicare il comportamento dei blocchi di procedure integrati legacy di Blockly.
Ciò include alcuni comportamenti che potresti non volere per i tuoi blocchi di procedure personalizzate, tra cui:
- I tipi di reso non sono supportati
- Tutti i parametri sono associati a una variabile globale
Se vuoi un comportamento diverso, puoi creare i tuoi modelli di dati delle procedure personalizzati.
Implementazione del modello di procedura
Il modello di dati della procedura deve implementare l'interfaccia
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...
}
Implementazione del modello di parametri
Il modello dati dei parametri deve implementare l'interfaccia
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...
}
Modifiche al trigger
Qualsiasi metodo che attiva modifiche al modello di procedura deve chiamare anche
triggerProceduresUpdate
dal plug-in
@blockly/block-shareable-procedures. In questo modo
doProcedureUpdate
viene chiamato su tutti i blocchi di procedure, causando il loro nuovo rendering.
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...
}
Eventi
I modelli di procedura nel plug-in @blockly/block-shareable-procedures attivano anche eventi quando le procedure vengono modificate. In questo modo, più spazi di lavoro possono essere mantenuti sincronizzati e i modelli di procedure possono essere condivisi tra loro. Se vuoi, puoi anche scegliere di attivare gli eventi.
Deserializzazione
Anche le classi devono avere un metodo static loadState
per supportare la
deserializzazione.
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...
}