ブロックの定義

ブロック定義では、ブロックの見た目と動作を記述します。テキスト、テキスト、 色、形、他のどのブロックに接できるかなどを指定できます。

JSON 形式と JavaScript API

Blockly では、JSON オブジェクトと JavaScript 関数という 2 つの方法でブロックを定義できます。 JSON 形式は、ローカライズ版を簡単に 実装するためのプロセスを 単語の順序が異なる言語にも適しています。推奨される JSON 形式 ブロックを定義します。

ただし、JSON 形式では ミューテータやバリデータとしても使用できますこれらは JavaScript で記述する必要があります。通常は 拡張機能です。

Blockly のオリジナルの JavaScript 実装を使用しているアプリは、 ブロック定義を下位レベルの Blockly API 関数呼び出しに直接 実装しています。

JSON

Blockly.defineBlocksWithJsonArray([{
  "type": "string_length",
  "message0": 'length of %1',
  "args0": [
    {
      "type": "input_value",
      "name": "VALUE",
      "check": "String"
    }
  ],
  "output": "Number",
  "colour": 160,
  "tooltip": "Returns number of letters in the provided text.",
  "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
}]);

JavaScript

Blockly.Blocks['string_length'] = {
  init: function() {
    this.appendValueInput('VALUE')
        .setCheck('String')
        .appendField('length of');
    this.setOutput(true, 'Number');
    this.setColour(160);
    this.setTooltip('Returns number of letters in the provided text.');
    this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
  }
};

init 関数は、ブロックのシェイプを作成します。このコンテキストでは、 キーワード this は、作成される実際のブロックです。

どちらの例でも同じ 'string_length' が読み込まれます。ブロックします。

ウェブでは、initJson 関数を使用して JSON 形式を読み込みます。 また、Blockly のウェブページで 2 つの形式を混在させることもできます。内容 可能な限り JSON を使用してブロックを定義することをおすすめします。また、JavaScript を使用して JSON でサポートされていないブロック定義の部分のみに対して行われます。

以下は、主に JSON を使用して定義されたブロックの例です。 動的なツールチップを表示するために JavaScript API を使用して拡張されています。

JavaScript

var mathChangeJson = {
  "message0": "change %1 by %2",
  "args0": [
    {"type": "field_variable", "name": "VAR", "variable": "item", "variableTypes": [""]},
    {"type": "input_value", "name": "DELTA", "check": "Number"}
  ],
  "previousStatement": null,
  "nextStatement": null,
  "colour": 230
};

Blockly.Blocks['math_change'] = {
  init: function() {
    this.jsonInit(mathChangeJson);
    // Assign 'this' to a variable for use in the tooltip closure below.
    var thisBlock = this;
    this.setTooltip(function() {
      return 'Add a number to variable "%1".'.replace('%1',
          thisBlock.getFieldValue('VAR'));
    });
  }
};

ブロックの色

ブロックのメインの色は、JSON の colour プロパティによって定義されます。 block.setColour(..) 関数を使用すると、 テーマを使用し、ブロックを定義することで、 。

JSON

{
  // ...,
  "colour": 160,
}

JavaScript

init: function() {
  // ...
  this.setColour(160);
}

ブロックの色のガイドをご覧ください。 をご覧ください。

ステートメントの接続

ユーザーは、nextStatement を使用してブロックのシーケンスを作成できます。 previousStatement コネクタ。Blockly の標準レイアウトでは ブロックが縦に積み重ねられて、上下に配置されています。

以前のコネクタが使用されているブロックに 出力コネクタを切り替えることができます。その逆も同様です。ステートメント ブロックという用語 値出力のないブロックを参照しています。通常、ステートメントブロックは 前の接続と次の接続の両方の履歴を確認できます。

nextStatement 接続と previousStatement 接続は、 typed、 この機能は標準のブロックでは使用されません。

次の接続

ブロックの下部にポイントを作成し、他のステートメントを その下に重ねて表示されます。次の接続があるが、前の接続がないブロック 通常はイベントを表します。このイベントを使ってレンダリングするよう 帽子

JSON

型指定なし:

{
  ...,
  "nextStatement": null,
}

タイプ済み(まれ):

{
  "nextStatement": "Action",
  ...
}

JavaScript

型指定なし:

this.setNextStatement(true);  // false implies no next connector, the default

タイプ済み(まれ):

this.setNextStatement(true, 'Action');

前の接続

ブロックの上部にノッチを作り、スタックとして接続できるようにする 記述できます。

以前の接続があるブロックに出力接続を設定することはできません。

JSON

型指定なし:

{
  ...,
  "previousStatement": null,
}

タイプ済み(まれ):

{
  "previousStatement": "Action",
  ...
}

JavaScript

型指定なし:

this.setPreviousStatement(true);  // false implies no previous connector, the default

タイプ済み(まれ):

this.setPreviousStatement(true, 'Action');

出力のブロック

ブロックには単一の出力があり、 実現しています。出力は値の入力に接続します。出力を持つブロックは、 値ブロックと呼ばれます。

JSON

型指定なし:

{
  // ...,
  "output": null,
}

型指定済み:

{
  // ...,
  "output": "Number",
}

JavaScript

型指定なし:

init: function() {
  // ...
  this.setOutput(true);
}

型指定済み:

init: function() {
  // ...
  this.setOutput(true, 'Number');
}

出力コネクタを持つブロックに、それ以前のステートメントのノッチを設定することはできません。

入力をブロック

ブロックには 1 つ以上の入力があり、各入力には フィールドがあり、接続で終わる場合があります。Google の各種プロダクトには、 種類も豊富です

  • 値の入力: アプリケーションの出力接続 value ブロックmath_arithmetic ブロック(加算、減算)は、 2 つの値入力を持つブロックの例を示しています。
  • ステートメント入力: ステートメント ブロック前の接続。「 while ループのネストされたセクションは、ステートメント入力の例です。
  • ダミー入力: ブロック接続がありません。次の場合に改行として機能します。 外部値入力を使用するようにブロックが構成されています。
  • 行末入力: ブロック接続がなく、常に 改行します。

カスタム入力を作成して、カスタム レンダリングできます。

JSON 形式と JavaScript API では、記述方法に若干異なるモデルが使用されます。 できます。

JSON の入力とフィールド

JSON で定義されたブロックは、補間されたシーケンスとして構造化される メッセージ文字列(message0message1、...)。各補間トークンは、 (%1, %2, ...) はフィールドまたは入力端です(したがって、入力コネクタは (メッセージ内で)を、一致する JSON argsN 配列にレンダリングします。この形式は 多言語対応を容易にすることを目的としています。

JSON

{
  "message0": "set %1 to %2",
  "args0": [
    {
      "type": "field_variable",
      "name": "VAR",
      "variable": "item",
      "variableTypes": [""]
    },
    {
      "type": "input_value",
      "name": "VALUE"
    }
  ]
}

補間トークンは args0 配列と完全に一致している必要があります。重複なし。 欠かせません。トークンは任意の順序で存在する可能性があるため、異なる ブロックのレイアウトを変更できます。

補間トークンの両側のテキストは空白文字が削除されます。 文字「%」を使用するテキスト(割合を参照する場合など)では、 %% に変換し、補間トークンとして解釈されないようにします。

引数の順序と引数の型によって、引数の形状が ブロックします。これらの文字列のいずれかを変更すると、ブロックのレイアウトを完全に変更される可能性があります。 これは、語順が異なる言語において特に重要です。 表示されます。"set %1 to %2"( )を反転して "put %2 in %1" とする必要があります。変更中 (残りの JSON はそのままにします) 次のブロックが作成されます。

Blockly はフィールドの順序を自動的に変更し、ダミー入力を作成しました。 外部入力から内部入力に切り替えられます。

Blockly ではメッセージ内の改行文字(\n)も自動的に置き換えられます します。

JSON

{
  "message0": "set %1\nto %2",
  "args0": [
    {
      "type": "field_variable",
      "name": "VAR",
      "variable": "item",
      "variableTypes": [""]
    },
    {
      "type": "input_value",
      "name": "VALUE"
    }
  ]
}

Args

各メッセージ文字列は、同じ番号の args 配列とペアになります。対象 たとえば、message0args0 と一致します。interpolation トークンは、 (%1%2、...)は、args 配列の項目を参照します。すべてのオブジェクトには type 文字列。残りのパラメータはタイプによって異なります。

独自のカスタム フィールドを定義することもできます。 カスタム入力を作成し、引数として渡します。

すべてのオブジェクトに alt フィールドを含めることもできます。Blockly が同期しないという オブジェクトの type が認識されると、代わりに alt オブジェクトが使用されます。対象 たとえば、field_time という名前の新しいフィールドが Blockly に追加された場合、 このフィールドで alt を使用して、古いバージョンの field_input フォールバックを定義できます Blockly:

JSON

{
  "message0": "sound alarm at %1",
  "args0": [
    {
      "type": "field_time",
      "name": "TEMPO",
      "hour": 9,
      "minutes": 0,
      "alt":
        {
          "type": "field_input",
          "name": "TEMPOTEXT",
          "text": "9:00"
        }
    }
  ]
}

alt オブジェクトは、独自の alt オブジェクトを持つことができるため、チェーン化が可能になります。 最終的に、Blockly が args0 配列にオブジェクトを作成できない場合( そのオブジェクトは単にスキップされます。alt

ブロックの最後にダミー入力が自動的に追加されます。 message 文字列が、入力に含まれていないテキストまたはフィールドで終わる。 したがって、ブロックの最後の入力がダミー入力である場合、 args 配列であり、message への補間は必要ありません。「 テーリングダミー入力の自動追加により message です。JSON の残りの部分を変更する必要はありません。こちらの例をご覧ください。 "set %1 to %2"(ダミー入力なし)と "put %2 in %1"(ダミー入力が追加されている) このページの前のセクションで 説明しました

implicitAlign0

まれに、自動作成された後置ダミー入力をアライメントする必要が "RIGHT" または "CENTRE" に追加します。指定しない場合のデフォルトは "LEFT" です。

以下の例では、message0"send email to %1 subject %2 secure %3" です。 Blockly は 3 行目にダミー入力を自動的に追加します。設定 implicitAlign0 から "RIGHT" にすると、この行は強制的に右揃えになります。この アライメントは、JSON で明示的に定義されていないすべての入力に適用されます。 ブロック定義(改行文字を置き換える行末の入力など) ('\n')が含まれている。非推奨のプロパティ lastDummyAlign0 もあります。 implicitAlign0 と同じ動作をします。

RTL(アラビア語とヘブライ語)のブロックを設計する場合は、左右が逆になります。 したがって、"RIGHT" はフィールドを左揃えにします。

message1args1implicitAlign1

一部のブロックは、自然に 2 つ以上の独立した部分に分割されます。 次の 2 つの行を持つ繰り返しブロックを考えてみます。

このブロックが 1 つのメッセージで記述されている場合、message0 プロパティは "repeat %1 times %2 do %3" になります。この文字列は翻訳者には不自然です。 %2 の置換の意味を説明するのは困難です。%2 ダミー 入力が望ましくない場合があります。場合によっては複数の ブロックの 2 番目の行のテキストを共有します。適切なアプローチ JSON で複数の message と args プロパティを使用します。

JSON

{
  "type": "controls_repeat_ext",
  "message0": "repeat %1 times",
  "args0": [
    {"type": "input_value", "name": "TIMES", "check": "Number"}
  ],
  "message1": "do %1",
  "args1": [
    {"type": "input_statement", "name": "DO"}
  ],
  "previousStatement": null,
  "nextStatement": null,
  "colour": 120
}

任意の数の messageargsimplicitAlign プロパティを定義できます。 0 から始まり、連続的に増加します。注: ブロック ファクトリではメッセージを複数の部分に分割することはできませんが、 手動で行うのは簡単です。

JavaScript の入力とフィールド

JavaScript API には、入力タイプごとに append メソッドが含まれています。

JavaScript

this.appendEndRowInput()
    .appendField('for each')
    .appendField('item')
    .appendField(new Blockly.FieldVariable());
this.appendValueInput('LIST')
    .setCheck('Array')
    .setAlign(Blockly.inputs.Align.RIGHT)
    .appendField('in list');
this.appendStatementInput('DO')
    .appendField('do');
this.appendDummyInput()
    .appendField('end');

各追記メソッドには、コード生成ツールで使用される識別子文字列を指定できます。ダミー 末尾行の入力を参照する必要はほとんどなく、通常は識別子が残ります。 未設定の場合。

JavaScript API には、データを追加するための汎用の appendInput メソッドも含まれています。 カスタム入力。なお、この場合、識別子を カスタム入力のコンストラクタに直接渡すことができます。

JavaScript

this.appendInput(new MyCustomInput('INPUT_NAME'))
    .appendField('an example label')

すべての appendInput メソッド(汎用と非汎用の両方)は、 メソッド チェーンを使用してさらに構成できるようにします。そこで、 入力を構成するために使用する組み込みメソッドが 3 つあります。

setCheck

JavaScript

input.setCheck('Number');

このオプションの関数は、接続された入力の型チェックに使用します。指定した場合 null(デフォルト)の場合、この入力は任意のブロックに接続できます。 詳細については、型チェックをご覧ください。

setAlign

JavaScript

input.setAlign(Blockly.inputs.Align.RIGHT);

このオプションの関数は、フィールドの位置揃えに使用します(下記参照)。3 つの この関数に引数として渡すことができる自己記述的値: Blockly.inputs.Align.LEFTBlockly.inputs.Align.RIGHTBlockly.inputs.Align.CENTER

RTL(アラビア語とヘブライ語)のブロックを設計する場合は、左右が逆になります。 したがって、Blockly.inputs.Align.RIGHT はフィールドを左揃えにします。

appendField

入力が作成され、appendInput でブロックに追加されると、 必要に応じて任意の数の fields を入力に追加できます。これらのフィールドは 各入力の用途を説明するラベルとしてよく使用されます。

JavaScript

input.appendField('hello');

最もシンプルなフィールド要素はテキストです。Blockly の慣例では 小文字のテキスト。適切な名前(Google、SQL など)を除きます。

入力行には、任意の数のフィールド要素を含めることができます。複数の appendField 呼び出しを連結して、複数のフィールドを同じテーブルに効率的に追加できる 表示されます。

JavaScript

input.appendField('hello')
     .appendField(new Blockly.FieldLabel('Neil', 'person'));

appendField('hello') 呼び出しは、実際には明示的な FieldLabel コンストラクタ: appendField(new Blockly.FieldLabel('hello')) コンストラクタは、 クラス名を指定してテキストのスタイルを設定できるようにしました。

インラインと外部

ブロック入力は、外部または内部としてレンダリングできます。

ブロック定義では、入力の有無を制御するブール値(省略可)を指定できます。 わかります。false の場合、値の入力はすべて外部になります( あります。true の場合、値の入力はすべてインラインになります( ご覧ください。

JSON

{
  // ...,
  "inputsInline": true
}

JavaScript

init: function() {
  // ...
  this.setInputsInline(true);
}

定義されていない場合、Blockly はいくつかのヒューリスティックを使用して、 最適ですBlockly が正しい選択をしていると仮定し、このフィールドは未定義のままにする 異なる言語の翻訳を自動的に生成できるため、この方法が推奨されます。 あります。"set %1 to %2"(外部入力)の JSON の例と、 "put %2 in %1"(インライン入力)については、このページの前半で説明します。

ブロックに数値などの小さな入力が含まれる可能性がある場合は、インライン入力を使用します。 collapse の場合、ユーザーはコンテキスト メニューからこのオプションを切り替えることができます。 有効(ツールボックスにカテゴリがある場合はデフォルトで true)になります。

フィールド

フィールドでは、ブロック内の大半の UI 要素を定義します。たとえば、 入力テキスト、ラベル、画像、入力を リテラル データ 文字列や数値などです。最も単純な例は math_number ブロックです。 これは、field_input を使用してユーザーが数値を入力できるようにします。

フィールドは、次を使用してブロックに追加されます。 appendField.

Blockly は、テキスト入力、カラー選択ツール、テキスト入力、 説明します。独自のフィールドを作成することもできます。

組み込みフィールドの詳細をご覧ください。

カスタム フィールドの作成についての詳細

アイコン

アイコンは、「メタ」を表示するブロック上の UI 要素を定義しますChronicle の ブロックします。

アイコンは、addIcon を使用してブロックに追加されます。

Blockly には、コメント アイコンを含む多くの組み込みアイコンが用意されています 警告アイコンが表示されます。独自のアイコンを作成することもできます。

カスタム アイコンの作成についての詳細をご覧ください。

ツールチップ

ユーザーがブロックにカーソルを合わせると、ツールチップが表示され、すぐにヘルプが表示されます。 テキストが長い場合は、自動的に折り返します。

JSON

{
  // ...,
  "tooltip": "Tooltip text."
}

JavaScript

init: function() {
  this.setTooltip("Tooltip text.");
}

JavaScript API では、ツールチップを 静的文字列です。これにより、動的なヘルプが可能になります。math_arithmetic を プルダウン オプションに応じて変わるツールチップの例 選択します。

JavaScript

Blockly.Blocks['math_arithmetic'] = {
  init: function() {
    // ...

    // Assign 'this' to a variable for use in the tooltip closure below.
    var thisBlock = this;
    this.setTooltip(function() {
      var mode = thisBlock.getFieldValue('OP');
      var TOOLTIPS = {
        'ADD': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,
        'MINUS': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,
        'MULTIPLY': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,
        'DIVIDE': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,
        'POWER': Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER
      };
      return TOOLTIPS[mode];
    });
  }
};

JavaScript API を使用すると、ブロックで静的な値ではなく関数を指定できます。 ツールチップの文字列を返します。これにより、動的なツールチップが可能になります。 例については、math_arithmetic をご覧ください。

カスタマイズ

カスタム レンダリングを用意してツールチップのデザインをカスタマイズすることもできます。 使用します。2 つのパラメータを受け入れる関数を作成します。

  • 1 つ目は、コンテンツをレンダリングする <div> 要素です。
  • 2 つ目はマウスオーバー中の実際の要素で 次のツールチップは

関数の本体では、任意のコンテンツを関数内にレンダリングできます。 項目マウスオーバーしているブロックで定義されているツールチップの文字列を取得するには、 Blockly.Tooltip.getTooltipOfObject(element); を呼び出します。ここで、element は 使用します。

最後に、この関数を登録して、Blockly が適切なタイミングで関数を呼び出せるようにします。

Blockly.Tooltip.setCustomTooltip(yourFnHere);

例については、 カスタム ツールチップのデモ

ヘルプの URL

ブロックには、関連するヘルプページを設定できます。これは ブロックを右クリックして [ヘルプ] を選択し、Blockly for Web のユーザーには 選択できます。この値が null の場合、メニューはグレー表示されます。 できます。

JSON

{
  // ...,
  "helpUrl": "https://en.wikipedia.org/wiki/For_loop"
}

JavaScript

init: function() {
  // ...
  this.setHelpUrl('https://en.wikipedia.org/wiki/For_loop');
}

JavaScript API を使用すると、ブロックで静的な値ではなく関数を指定できます。 string は URL 文字列を返し、動的なヘルプを可能にします。

リスナーと検証ツールを変更する

ブロックには、変更時に呼び出される変更リスナー関数を設定できます。 (ブロックに関係のないものを含む)。これらは主に ブロックの警告テキストや同様のユーザー通知を できます。

関数で setOnChange を呼び出すことで関数が追加されます。 JSON 拡張機能を使用する予定の場合は init の実行時に呼び出すか、 サポートしています。

JSON

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

Blockly.Extensions.register('warning_on_change', function() {
  // Example validation upon block change:
  this.setOnChange(function(changeEvent) {
    if (this.getInput('NUM').connection.targetBlock()) {
      this.setWarningText(null);
    } else {
      this.setWarningText('Must have an input block.');
    }
  });
});

JavaScript

Blockly.Blocks['block_type'] = {
  init: function() {
    // Example validation upon block change:
    this.setOnChange(function(changeEvent) {
      if (this.getInput('NUM').connection.targetBlock()) {
        this.setWarningText(null);
      } else {
        this.setWarningText('Must have an input block.');
      }
    });
  }
}

システムが関数を呼び出し、 変更イベント。 関数内で、this はブロック インスタンスを参照します。

この関数は変更のたびに呼び出されるため、使用する場合、デベロッパーは リスナーはすぐに実行されます。ワークスペースの変更にも注意する必要があります。 カスケードまたはループバックする場合があります

controls_flow_statementslogic_compareprocedures_ifreturn を参照 ご覧ください。

編集可能なフィールドには、入力検証用の独自のイベント リスナーがあることに注意してください。 副作用を引き起こします

ミューテーター

ミューテータを使用すると、高度なブロックの形状を変化させることができます。 ユーザーがコンポーネントの追加、削除、並べ替えを行うダイアログを開く。ミューテータは mutator キーを使用して JSON で追加します。

JSON

{
  // ...,
  "mutator":"if_else_mutator"
}

ブロックごとの構成

ブロック インスタンスには、インスタンスの動作を設定するさまざまなプロパティがあります。 できます。これらを使用して、特定のプロパティを反映するようにワークスペースを制約できます。 (例: 「開始」イベントが 1 つしかないなど)、またはフォーカス ユーザーの労力によって実現されます(チュートリアルなど)。

削除可能な状態

block.setDeletable(false);

false に設定した場合、ユーザーはブロックを削除できません。デフォルトでブロック 編集可能なワークスペースで削除できます。

すべてのブロック(削除できないブロックも含む)をプログラムで削除できます。

block.dispose();

編集可能な状態

block.setEditable(false);

false に設定した場合、ユーザーはブロックのフィールドを変更できません。 (プルダウン、テキスト入力など)。編集可能なコンポーネントでは、ブロックはデフォルトで編集可能 できます。

移動可能な状態

block.setMovable(false);

false に設定した場合、ユーザーはブロックを直接移動できません。「 移動できないブロックが、別のブロックの子である場合、そのブロックと ただし、親が移動されると親と一緒に移動します。ブロック デフォルトでは編集可能なワークスペースでは移動可能です

どのブロックも(移動できないものであっても)、 できます。

block.moveBy(dx, dy)

ワークスペース上のブロックの開始位置は、デフォルトで (0, 0) になります。

データをブロック

this.data = '16dcb3a4-bd39-11e4-8dfc-aa07a5b093db';

data は、ブロックに添付される任意の文字列です。Google データ文字列もシリアル化されます。これには、 ブロックを複製するか、コピー&ペーストされます。

多くの場合、これはブロックを外部リソースに関連付けるために使用されます。

JSON にシリアル化すると、データはブロック内の最上位プロパティとして保存されます。

{
  "type": "my_block",
  "data": "16dcb3a4-bd39-11e4-8dfc-aa07a5b093db",
  // etc..
}

XML(古いアイスボックス型シリアル化システム)にシリアル化すると、データ文字列 ブロック内の <data></data> タグに格納されます。

<block type="my_block">
  <data>16dcb3a4-bd39-11e4-8dfc-aa07a5b093db</data>
  <!-- etc... -->
</block>

破壊

ブロックには destroy フックがあります。このフックは、ブロックが削除されるときに呼び出されます。 できます。これにより、バッキング データモデルや外部 ブロックに関連付けられたリソースが除外されます。

JSON

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

Blockly.Extensions.registerMixin('destroy', {
  destroy: function() {
    this.myResource.dispose();
  }
});

JavaScript

Blockly.Blocks['block_type'] = {
  destroy: function() {
    this.myResource.dispose();
  }
}

destroy メソッドは、ブロックの親が破棄された後に呼び出されますが、 破棄される前に示されます。

コンテキストメニュー

ブロックのコンテキスト メニューではデフォルトで、ユーザーは コメントの追加、ブロックの重複などができます。

個々のブロックのコンテキスト メニューを無効にするには、次のコマンドを実行します。

block.contextMenu = false;

メニューに表示されるオプションをカスタマイズすることもできます。Google Chat のメニューをカスタマイズするには、 詳細は、このモジュールの コンテキスト メニューのドキュメントをご覧ください。 個々のブロックのメニューをカスタマイズするには、 customContextMenu。この関数はメニュー オプションの配列と によってその場で修正されるため、ユーザーはアイテムの追加と削除の両方を行うことができます。

各メニュー オプションは、次の 3 つのプロパティを持つオブジェクトです。

  • text は表示テキストです。
  • enabled はブール値です。無効にするとオプションが表示されますが、グレー表示になります。 あります。
  • callback は、オプションがクリックされたときに呼び出される関数です。