预设块

您可以配置(预设)工具箱中各个块的状态。例如,您可以将字段设置为默认值,或将两个块连接在一起。您还可以创建阴影块,以用作子块的默认值。

示例

以下是一些预设块示例。

使用预设字段值的屏蔽

下面是一个 math_number 块,其字段显示的是数字 42,而不是默认值 0:

下面是一个用于设置此字段的工具箱:

JSON

{
  "kind": "flyoutToolbox",
  "contents": [
    {
      "kind": "block",
      "type": "math_number",
      "fields": {
        "NUM": 42
      }
    },
  ]
}

XML

<xml id="toolbox" style="display: none">
  <block type="math_number">
    <field name="NUM">42</field>
  </block>
</xml>

预连接的代码块

下面是一个 controls_for 块,其中有三个 math_number 块连接到它:

下面是一个用于预连接这些代码块的工具箱:

JSON

{
  "kind": "flyoutToolbox",
  "contents": [
    {
      "kind": "block",
      "type": "controls_for",
      "inputs": {
        "FROM": {
          "block": {
            "type": "math_number",
            "fields": {
              "NUM": 1
            }
          }
        },
        "TO": {
          "block": {
            "type": "math_number",
            "fields": {
              "NUM": 10
            }
          }
        },
        "BY": {
          "block": {
            "type": "math_number",
            "fields": {
              "NUM": 1
            }
          }
        },
      }
    },
  ]
}

XML

<xml id="toolbox" style="display: none">
  <block type="controls_for">
    <value name="FROM">
      <block type="math_number">
        <field name="NUM">1</field>
      </block>
    </value>
    <value name="TO">
      <block type="math_number">
        <field name="NUM">10</field>
      </block>
    </value>
    <value name="BY">
      <block type="math_number">
        <field name="NUM">1</field>
      </block>
    </value>
  </block>
</xml>

已停用的分块

无法从工具箱中拖动已停用的块。您可以使用可选的 disabled 属性单独停用各个分块。

JSON

{
  "kind": "flyoutToolbox",
  "contents": [
    {
      "kind": "block",
      "type":"math_number"
    },
    {
      "kind": "block",
      "type": "math_arithmetic"
    },
    {
      "kind": "block",
      "type": "math_single",
      "disabled": "true"
    }
  ]
}

XML

<xml id="toolbox" style="display: none">
  <block type="math_number"></block>
  <block type="math_arithmetic"></block>
  <block type="math_single" disabled="true"></block>
</xml>

您还可以使用 setEnabled 以编程方式停用或启用某个分块。

配置屏蔽条件

您可以在工具箱中配置块,方法与在工作区中配置块一样。例如,您可以设置字段值、将块连接到值或语句输入、添加注释,以及收起或停用块。之所以能够实现这一点,是因为工具箱使用与工作区用于序列化块的相同代码来配置块。

这也意味着,您可以轻松创建块配置。只需将块加载到工作区,按需要进行配置,然后在控制台中运行以下代码进行序列化即可。

JSON

console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));

XML

console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));

然后,您可以复制配置代码并将其粘贴到您的工具箱中。请务必移除 xyid 属性,因为这些属性会被工具箱忽略。

变量字段

变量字段在工具箱中与序列化时的指定方式可能有所不同。

具体而言,当变量字段通常序列化为 JSON 时,它们只包含所代表变量的 ID,因为变量的名称和类型是单独序列化的。不过,工具箱不包含此类信息,因此需要直接将其包含在变量字段中。

{
  "kind": "flyoutToolbox",
  "content": [
    {
      "kind": "block",
      "type": "controls_for",
      "fields": {
        "VAR": {
          "name": "index",
          "type": "Number"
        }
      }
    }
  ]
}

阴影块

阴影块是执行多种功能的占位符块:

  • 它们表示其父级代码块的默认值。
  • 借助它们,用户无需提取数字或字符串块,即可直接输入值。
  • 与常规块不同,如果用户在其上方放置块,则会被替换。
  • 它们会告知用户预期值的类型。

如需创建阴影块,请使用 shadow 属性 (JSON) 或 <shadow> 标记 (XML),而不是 block 属性或 <block> 标记。例如,下面是一个 math_arithmetic 块,其中连接了两个 math_number 阴影块:

下面是一个使用这些阴影块的工具箱:

JSON

{
  "kind": "flyoutToolbox",
  "contents": [
    {
      "kind": "block",
      "type": "math_arithmetic",
      "fields": {
        "OP": "ADD"
      },
      "inputs": {
        "A": {
          "shadow": {
            "type": "math_number",
            "fields": {
              "NUM": 1
            }
          }
        },
        "B": {
          "shadow": {
            "type": "math_number",
            "fields": {
              "NUM": 1
            }
          }
        }
      }
    },
  ]
}

XML

<xml id="toolbox" style="display: none">
  <block type="math_arithmetic">
    <field name="OP">ADD</field>
    <value name="A">
      <shadow type="math_number">
        <field name="NUM">1</field>
      </shadow>
    </value>
    <value name="B">
      <shadow type="math_number">
        <field name="NUM">1</field>
      </shadow>
    </value>
  </block>
</xml>