变量字段

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

变量构造函数采用可选变量名称、可选validator、可选变量类型数组以及可选默认类型。

  • 变量名称应为字符串。这将是该字段包含的初始变量的名称。如果为 null 或 undefined,系统会生成一个唯一的名称。
  • 变量类型应为字符串数组。这会告知字段该字段可以包含哪些类型的变量(即应添加到下拉菜单中的变量类型)。如果值为 null 或 undefined,系统会接受所有变量类型(并添加到下拉列表中)。
  • 默认类型应为字符串。创建字段的初始变量模型时会用到此字段。如果定义了此属性,则应将其包含在变量类型数组中。如果为 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.createVariable 函数定义这些变量。

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