확장 프로그램 및 믹스인

확장 프로그램은 초기화 중에 블록에서 실행되는 함수입니다. 이러한 함수는 블록에 맞춤 구성 또는 동작을 추가하는 경우가 많습니다. 믹스인을 사용하면 블록에 속성이나 도우미 함수를 추가할 수 있지만 즉시 실행할 수는 없습니다.

JSON으로 블록을 정의할 때만 확장 프로그램이나 믹인을 사용하면 됩니다. JavaScript를 사용하여 블록을 정의하는 경우 init에서 직접 초기화 함수를 호출하고 정의에 메서드나 속성을 직접 추가할 수 있습니다.

확장 프로그램

확장 프로그램은 블록이 생성될 때 지정된 유형의 각 블록에서 실행되는 함수입니다. 예를 들어 맞춤 구성 (예: 블록의 도움말 설정) 또는 맞춤 동작 (예: 블록에 이벤트 리스너 추가)을 추가할 수 있습니다.

// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
    'parent_tooltip_extension',
    function() { // this refers to the block that the extension is being run on
      var thisBlock = this;
      this.setTooltip(function() {
        var parent = thisBlock.getParent();
        return (parent && parent.getInputsInline() && parent.tooltip) ||
            Blockly.Msg['MATH_NUMBER_TOOLTIP'];
      });
    });

확장 프로그램은 문자열 키와 연결할 수 있도록 '등록'되어야 합니다. 그런 다음 이 문자열 키를 블록 유형의 JSON 정의에 있는 extensions 속성에 할당하여 블록에 확장 프로그램을 적용할 수 있습니다.

{
 //...,
 "extensions": ["parent_tooltip_extension",]
}

한 번에 여러 확장 프로그램을 추가할 수도 있습니다. 확장 프로그램을 하나만 적용하는 경우에도 extensions 속성은 배열이어야 합니다.

{
  //...,
  "extensions": ["parent_tooltip_extension", "break_warning_extension"],
}

Mixin

Blockly는 블록에 일부 속성/도우미 함수를 추가하고 싶지만 즉시 실행하지는 않는 상황에 유용한 메서드도 제공합니다. 이렇게 하면 모든 추가 속성/메서드가 포함된 믹스인 객체를 등록할 수 있습니다. 그런 다음 믹스인 객체는 지정된 블록 유형의 인스턴스가 생성될 때마다 믹스인을 적용하는 함수로 래핑됩니다.

Blockly.Extensions.registerMixin('my_mixin', {
  someProperty: 'a cool value',

  someMethod: function() {
    // Do something cool!
  }
))`

믹신과 연결된 문자열 키는 다른 확장 프로그램과 마찬가지로 JSON에서 참조할 수 있습니다.

{
 //...,
 "extensions": ["my_mixin"],
}