# 扩展现有字段

为了扩展现有字段,您必须创建内置字段(例如 FieldTextInputFieldColour)的子类,然后修改部分字段以满足您的需求。您可以修改字段的某些部分:

如果要 创建不需要任何内置字段行为的自定义字段,则应创建 Field 的子类。

# 常见扩展程序

大多数自定义字段都会扩展为以下三种类型之一:

  • 文本输入:如果您希望用户在字段中输入内容,则应扩展 FieldTextInput
  • 数字:如果要存储数字,应扩展 FieldNumber
  • 下拉菜单:如果要创建下拉菜单,但希望它存储与默认字符串或图片模型不同的模型,则应扩展 FieldDropdown
    • 注意:在扩展 FieldDropdown 之前,请检查下拉字段的 自定义选项 不能满足您的需要。

在某些情况下,您可能需要扩展其他字段类型。例如,FieldLabelSerializable 扩展了 FieldLabel

# 子类化

import * as Blockly from 'blockly';

export class MyCustomTextField extends Blockly.FieldTextInput {
  constructor(value, validator, config) {
    super(value, validator, config);
  }
}

字段的子类的构造函数与 自定义字段的构造函数 非常相似。子构造函数的签名通常应与超级构造函数的签名匹配。

# JSON 和注册

您还应注册一次该字段:

Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);

并在类中提供 fromJson 的实现,以使其支持 JSON 格式:

static fromJson(options) {
  const value = Blockly.utils.replaceMessageReferences(options.value);
  return new MySubclassName(value);
}

如需详细了解如何注册字段,请参阅“创建自定义字段”中的 JSON 和注册 部分。