프로시져는 사용할 수 있습니다. Google Cloud에서 제공하는 @blockly/block-shareable-procedures 플러그인은 다음을 위해 빌드됩니다. Blockly의 기존 내장 프로시저 블록 동작을 복제합니다.
여기에는 맞춤 프러시저에 적합하지 않을 수 있는 일부 동작이 포함됩니다. 다음과 같은 차단 기능을 제공합니다.
- 반환 유형은 지원되지 않음
- 모든 매개변수가 전역 변수와 연결됨
다른 동작을 원하는 경우 자체 커스텀 프러시저 데이터를 만들 수 있습니다. 모델을 학습시키는 작업도 반복해야 합니다
프러시저 모델 구현
수술 데이터 모델은 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...
}
매개변수 모델 구현
매개변수 데이터 모델은 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...
}
변경사항 트리거
프러시저 모델에 대한 변경을 트리거하는 모든 메서드는 다음과 같이 호출해야 합니다.
triggerProceduresUpdate
@blockly/block-shareable-procedures 플러그인 이렇게 하면
프로시져 블록에서 doProcedureUpdate
를 호출하여 다시 렌더링되도록 합니다.
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...
}
이벤트
인코더-디코더 아키텍처를 @blockly/block-shareable-procedures 플러그인도 실행됨 프로시져가 수정될 때의 이벤트 이렇게 하면 여러 작업공간이 절차 모델을 공유할 수 있습니다. 또한 원하는 경우 이벤트를 실행할 수 있습니다.
역직렬화
클래스에는 각각을 지원하는 static loadState
메서드도 필요합니다.
역직렬화를 지원합니다
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...
}