blockly > 字段

Field 类

可编辑字段的抽象类。

Signature:

export declare abstract class Field<T = any> implements IASTNodeLocationSvg, IASTNodeLocationWithBlock, IKeyboardAccessible, IRegistrable, ISerializable 

实现IASTNodeLocationSvgIASTNodeLocationWithBlockIKeyboardAccessibleIRegistrableISerializable

构造函数

构造函数 修饰符 说明
(构造函数)(值, 验证器, 配置) 构造 Field 类的新实例

属性

属性 修饰符 类型 说明
borderRect_ protected SVGRectElement | null 所渲染字段的 SVG 边框元素。
clickTarget_ protected 元素 | null 点击处理程序绑定到的元素。
constants_ protected ConstantProvider | null 与来源块的渲染程序相关联的常量。
游标 string 悬停在启动编辑器的热点上时显示鼠标光标样式。
DEFAULT_VALUE T | null

如需覆盖在 **Field** 中设置的默认值,请直接更新原型。

示例:FieldImage.prototype.DEFAULT_VALUE = null;

可修改 boolean 可修改的字段通常会显示某种界面,表明这些字段是可修改的。序列化器也会保存这些对象。
enabled_ protected boolean 能否使用编辑器在可编辑块上更改字段值?
fieldGroup_ protected SVGGElement | null 所渲染字段的 SVG 组元素。
isDirty_ protected boolean 是否需要重新渲染此块?
maxDisplayLength number 添加省略号前可显示的文字字符数上限。
姓名? string (可选)字段名称。在每个块中是唯一的。静态标签通常未命名。
NBSP

static

readonly

(未声明) 不间断空格。
可序列化 boolean 可序列化字段由序列化器保存,不可序列化字段则不保存。可修改的字段也应可序列化。默认情况下,情况并非如此,因此 SERIALIZABLE 具有向后兼容性。
size_ protected 尺寸
SKIP_SETUP

static

readonly

唯一符号 一个值,用于指示字段的构造函数何时 *不应* 设置字段的值或运行 configure_,并且应允许子类执行此操作。
sourceBlock_ protected 屏蔽设置 | null 禁止此字段是附加的。最初为 null,然后在 init 中设置。
textContent_ protected 文本 | null 所渲染字段的文本内容元素。
textElement_ protected SVGTextElement | null 所渲染字段的 SVG 文本元素。
validator_ protected FieldValidator<T> | null 当用户修改可编辑字段时调用的验证函数。
value_ protected T | null
visible_ protected boolean 该字段是可见还是因块已收起而隐藏?

方法

方法 修饰符 说明
applyColour()

更新字段以匹配块的颜色/样式。

如果字段的颜色取决于块的颜色,非抽象子类可能希望实现此行为。系统会自动在相关时间(例如父级代码块或渲染器发生变化时)调用它。

如需了解详情,请参阅字段文档;如需查看示例,请参阅 FieldDropdown。

bindEvents_() protected 将事件绑定到该字段。如果子类需要自定义输入处理,可以将其替换。
configure_(config) protected 处理传递给该字段的配置映射。
createBorderRect_() protected 创建一个字段边框矩形元素。不被子类替换。而应修改 initView 内函数的结果,或创建要调用的单独函数。
createTextElement_() protected 创建字段文本元素。不被子类替换。而应修改 initView 内函数的结果,或创建要调用的单独函数。
doClassValidation_(newValue) protected

在设置对字段的值所做的更改之前,先进行验证。如需查看子类实现的示例,请参阅 **FieldDropdown**。

**注意:** 验证会返回 Tnullundefined 之间的一个选项。**Field** 的实现永远不会返回 undefined,但如果新值与 T 兼容,子类会返回 undefined

doClassValidation_(newValue) protected
doValueInvalid_(_invalidValue, _fireChangeEvent) protected 用于通知该字段输入的值无效。可被子类替换,请参阅 FieldTextInput。默认情况下不执行任何操作。
doValueUpdate_(newValue) protected 用于更新字段的值。可由子类替换,以自定义值存储/更新外部内容。
fromJson(_options) static

子类应重新实现此方法,以根据 JSON arg 对象构建其 Field 子类。

如果字段子类未替换此方法,则尝试在 FieldRegistry 中注册该子类会出错。

getAbsoluteXY_() protected 返回此字段左上角的绝对坐标。原点 (0,0) 是网页正文的左上角。
getBorderRect() protected 获取矩形边框元素。
getClickTarget_() protected 点击处理程序将绑定到的元素。如果未明确设置,则默认为字段的 SVG 根。在可编辑字段中点击该元素时,系统会打开编辑器。
getConstants() 获取渲染程序常量提供程序。
getDisplayText_() protected 获取此字段中要显示在代码块上的文本。由于省略号和其他格式设置,可能与 getText 不同。
getFlipRtl() 返回我们是否应在 RTL 中翻转字段。
getSize()

返回字段的高度和宽度。

*通常*,这应该是调用 render_ 的唯一位置。

getSourceBlock() 获取此字段附加到的块。
getSvgRoot() 获取此可编辑字段的组元素。用于测量尺寸和定位。
getText_() protected 用于覆盖此字段返回文本的开发者钩子。如果此字段值的文本表示形式不仅仅是该值的字符串类型,则覆盖。返回 null 可执行字符串类型转换。
getText() 从此字段获取文本。替换 getText_ 以提供与简单地将值转换为字符串不同的行为。
getTextContent() protected 获取文本内容。
getTextElement() protected 获取文本元素。
getTooltip() 返回此字段的提示文本。
getValidator() 获取可修改字段的验证函数;如果未设置,则为 null。
getValue() 获取字段的当前值。
initModel() 将字段模型安装到块上后,对其进行初始化。默认情况下不执行任何操作。
initView() protected 为此字段创建屏蔽界面。
isClickable() 检查此字段是否定义了 showEditor_ 函数。
isClickableInFlyout(autoClosingFlyout) 检查在区块处于弹出状态时,相应字段是否可点击。默认情况下,字段在始终打开的弹出框(例如简单的工具箱)中是可点击的,但在自动关闭的弹出框(例如类别工具箱)中是可点击的。子类可以替换此函数来改变这种行为。请注意,isClickable 也必须返回 true 才能发挥作用。
isCurrentlyEditable() 检查此字段当前是否可修改。有些字段永远不可修改(例如文本标签)。其他字段也可以修改,但可能存在于不可修改的块中或当前处于停用状态。
isEnabled() 检查当来源块可修改时,是否可以使用编辑器更改此字段的值。
isFullBlockField() protected

定义此字段是否应占据整个代码块。

替换此函数时请谨慎。它可能无法正常运行,或无法按预期运行,因为该行为有点被黑客入侵。如果您正在考虑覆盖此功能,请在论坛上发布与您的预期行为相符的帖子,看看是否有其他方法。

isSerializable() 检查此字段是否应由 XML 渲染程序序列化。处理向后兼容性和不协调状态的逻辑。
isTabNavigable() 返回字段是否可通过标签页导航。
isVisible() 获取此可修改字段是否可见。
loadLegacyState(callingClass, state) 使用旧的 XML 钩子(如果应使用)加载指定的状态。返回 true 表示已处理加载,否则返回 false。
onLocationChange(_) 通知字段其营业地点已更改。
onMouseDown_(e) protected 处理字段上的指针按下事件。
onShortcut(_shortcut) 处理指定的键盘快捷键。
positionBorderRect_() protected 设置字段大小更改后的边框矩形。
positionTextElement_(xOffset, contentWidth) protected 在大小发生变化后确定字段的文本元素位置。这会同时处理 LTR 和 RTL 定位。
render_() protected

getSize() 用于移动/调整任何 DOM 元素的大小,以及获取新的大小。

影响块大小/形状的所有渲染都应在此处完成,并应由 getSize() 触发。

repositionForWindowResize()

一个开发者钩子,用于在窗口大小调整期间调整 WidgetDiv 的位置。如果您的字段具有在调整窗口大小时需要重新定位的 WidgetDiv,则需要定义此钩子。例如,文本输入字段定义了此钩子,以便输入 WidgetDiv 可以在窗口大小调整事件发生时自行调整位置。停用模态输入时,这一点尤为重要,因为 Android 设备会在软键盘打开时触发窗口大小调整事件。

如果您希望 WidgetDiv 隐藏自身而不是重新定位,则返回 false。这是默认行为。

DropdownDiv 已处理自己的定位逻辑,因此如果您的字段只包含 DropdownDiv,则无需替换此函数。

saveLegacyState(callingClass) protected 如果应使用 XML 状态,则返回字符串化版本。否则,将返回 null,以指示该字段应使用自己的序列化。
setEnabled(enabled) 设置当来源块可修改时,是否可以使用编辑器更改此字段的值。
setSourceBlock(block) 将此字段附加到数据块。
setTooltip(newTip) 设置此字段的提示。
setValidator(handler)

为可修改字段设置新的验证函数,或清除之前设置的验证程序。

验证器函数会接受新的字段值,并返回经过验证的值。经过验证的值可以是输入值、输入值的修改版本,也可以是用于取消更改的 null。

如果函数未返回任何值(或返回未定义的值),则将新值视为有效值。这是为了支持将经过验证的函数用作字段级更改事件通知的字段。

setValue(newValue, fireChangeEvent) 用于更改字段的值。处理验证和事件。子类应替换 doClassValidation_ 和 doValueUpdate_,而不是此方法。
showEditor_(_e) protected 用于为字段创建编辑器的开发者钩子。默认情况下,此项为空操作;必须覆盖此项才能创建编辑器。
updateEditable() 添加或移除用于指示此字段是否可修改的界面。
updateSize_(margin) protected 根据文本更新字段大小。