変数フィールドには、値として文字列が格納され、テキストとして文字列が格納されます。値は変数の ID であり、テキストは変数の名前です。
変数フィールド

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

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

作成
型なし
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');
}
};
型付き
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は、コンストラクタのデフォルト タイプ パラメータと同じルールに従います。 - ノードの内部テキストは変数の名前です。内部テキスト値は、コンストラクタの変数名パラメータと同じルールに従います。
変数バリデータを作成する
変数フィールドの値は文字列であるため、バリデータは文字列を受け取り、文字列、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] に設定されます。](https://developers.google.com/static/blockly/images/fields/variable/validator.gif?hl=ja)