커스텀 프러시저 데이터 모델 만들기

프로시져는 사용할 수 있습니다. 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...
}