変数フィールド

変数フィールドは、値を文字列として、テキストを文字列として保存します。値は変数の ID で、テキストは変数の名前です。

変数フィールド

「変数:」というラベルの付いたブロックと、「x」が選択されたプルダウン フィールド。

エディタが開いている変数フィールド

同じブロックでプルダウンが開いている状態。メニューには、「x」、「変数の名前を変更...」、「変数「x」を削除」という項目があります。

折りたたまれたブロックの変数フィールド

折りたたまれた後の同じブロック。ラベルは「variable: x」で、右端がギザギザになっており、折りたたまれていることを示しています。

作成

型なし

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

Typed

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

変数コンストラクタは、オプションの変数名、オプションのバリデータ、オプションの変数型の配列、オプションのデフォルト型を受け取ります。

  • 変数名は文字列にする必要があります。これは、フィールドが保持する初期変数の名前になります。null または未定義の場合は、一意の名前が生成されます。
  • 変数型は文字列の配列である必要があります。これにより、フィールドが保持できる変数の型(つまり、プルダウンに追加する変数の型)がフィールドに伝えられます。null または未定義の場合、すべての変数型が受け入れられます(ドロップダウンに追加されます)。
  • デフォルトの型は文字列にする必要があります。これは、フィールドの初期変数モデルを作成するときに使用されます。定義されている場合は、変数型の配列に含める必要があります。null または未定義の場合、この値はデフォルトで空の文字列になります。つまり、初期変数は柔軟に型指定されます。

→ 厳密な型指定の詳細については、型チェックをご覧ください。

シリアル化

JSON

変数フィールドの JSON は次のようになります。

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

ここで、FIELDNAME は変数フィールドを参照する文字列であり、値はフィールドが参照する変数の ID です。

このフィールドをツールボックスで使用する場合は、参照できる変数がないため、名前と(必要に応じて)型を直接指定することもできます。

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

変数フィールドの XML は次のようになります。

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • ノードの name 属性には、変数フィールドを参照する文字列が含まれています。
  • ノードの id 属性には、フィールドが参照する変数の ID が含まれます。
  • ノードの variabletype 属性には変数の型が含まれます。variabletype は、コンストラクタのデフォルトの型パラメータと同じルールに従います。
  • ノードの内部テキストは変数の名前です。innerText 値は、コンストラクタの変数名パラメータと同じルールに従います。

変数バリデーターを作成する

変数フィールドの値は文字列であるため、バリデーターは文字列を受け取り、文字列、null、または undefined を返す必要があります。

事前定義された変数のみをオプションとして受け入れるバリデーターの例を次に示します。これらの変数は、ワークスペースの読み込み時に Workspace.getVariableMap().createVariable 関数で定義する必要があります。

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}

検証関数が動作している様子を示すアニメーション GIF。プルダウンから [Picard] または [Riker] を選択すると、プルダウンがその選択に設定されます。「x」を選択すると、プルダウンは前の選択肢である「Riker」に設定されます。