变量字段将字符串存储为其值,将字符串存储为其文本。通过 value 是变量的 ID,而 text 是变量的名称。
变量字段
编辑器处于打开状态的变量字段
收起的块中的变量字段
恣意创作
非类型
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.createVariable 函数。
function(newValue) {
var validIds = ['Worf', 'Riker', 'Picard'];
if (validIds.indexOf(newValue) == -1) {
return null;
}
return newValue;
}