变量字段

变量字段将字符串存储为值,并将字符串存储为文本。值是变量的 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');
  }
};

类型化

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 或 undefined,系统会生成一个唯一名称。
  • 变量类型应为字符串数组。这会告知字段可以包含哪些类型的变量(即,要向下拉菜单中添加哪些类型的变量)。如果为 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 遵循与构造函数的默认类型形参相同的规则。
  • 节点的内部文本是变量的名称。内部文本值遵循与构造函数的变量名称参数相同的规则。

创建变量验证器

变量字段的值是字符串,因此任何验证器都必须接受字符串并返回字符串、nullundefined

以下是一个验证器的示例,该验证器仅接受一些预定义的变量作为选项。在加载工作区时,需要使用 Workspace.getVariableMap().createVariable 函数定义这些变量。

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

一个 GIF 动画,显示验证函数的工作情况。当从下拉菜单中选择“Picard”或“Riker”时,下拉菜单会设置为该选择。选择“x”后,下拉菜单会设置为之前的选择“Riker”。