拡張機能と mixin

拡張機能は、初期化中にブロックで実行される関数です。多くの場合、ブロックにカスタム構成や動作を追加します。Mixin を使用すると、プロパティやヘルパー関数をブロックに追加できますが、すぐには実行されません。

拡張機能またはミックスインを使用するのは、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",]
}

複数の広告表示オプションを一度に追加することもできます。拡張機能を 1 つだけ適用する場合でも、extensions プロパティは配列にする必要があります。

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

Mixin

Blockly には、ブロックにプロパティやヘルパー関数を追加するが、すぐに実行しない場合に便利なメソッドも用意されています。これは、追加のプロパティやメソッドをすべて含む mixin オブジェクトを登録することで機能します。次に、このミックスイン オブジェクトを関数でラップします。この関数は、指定されたブロックタイプのインスタンスが作成されるたびにミックスインを適用します。

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

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

Mixin に関連付けられた文字列キーは、他の拡張機能と同様に JSON で参照できます。

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