變數欄位會將字串儲存為值,並將字串儲存為文字。值是變數的 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');
}
};
變數建構函式會接收選用的變數名稱、選用的驗證器、選用的變數型別陣列,以及選用的預設型別。
- 變數名稱應為字串。這是欄位所含初始變數的名稱。如果為空值或未定義,系統會產生專屬名稱。
- 變數類型應為字串陣列。這會告知欄位可保留哪些類型的變數 (也就是要新增至下拉式選單的變數類型)。如果為空值或未定義,系統會接受所有變數類型 (並新增至下拉式選單)。
- 預設類型應為字串。建立欄位的初始變數模型時,系統會使用這項資訊。如果已定義,則應納入變數類型陣列。如果這個值為空值或未定義,則預設為空字串,表示初始變數會是彈性型別。
→ 如要進一步瞭解嚴格型別,請參閱型別檢查。
序列化
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;
}