如需扩展现有字段,您必须对内置字段(例如 FieldTextInput
、FieldColour
)进行子类化,然后根据需要修改其中的一部分。您可以修改字段的某些部分:
如果您希望创建一个自定义字段,并且该自定义字段不需要来自任何内置字段的行为,则应创建 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.parsing.replaceMessageReferences(options.value);
return new MySubclassName(value);
}
如需详细了解如何注册字段,请参阅“创建自定义字段”中的 JSON 和注册部分。