变量字段

变量字段将字符串存储为其值,将字符串存储为其文本。通过 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 遵循与构造函数的默认类型参数相同的规则。
  • 节点的内部文本是变量的名称。内部文本值 遵循的规则与构造函数的变量名称参数相同。

创建变量验证器

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

下面是一个仅接受一些预定义变量的验证程序示例, 选项。这些变量需要使用 Workspace.createVariable 函数。

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