Field 类
可修改字段的抽象类。
Signature:
export declare abstract class Field<T = any> implements IKeyboardAccessible, IRegistrable, ISerializable, IFocusableNode
实现了: IKeyboardAccessible、IRegistrable、ISerializable、IFocusableNode
构造函数
构造函数 | 修饰符 | 说明 |
---|---|---|
(constructor)(value, validator, config) | 构造 Field 类的新实例 |
属性
属性 | 修饰符 | 类型 | 说明 |
---|---|---|---|
borderRect_ | protected |
SVGRectElement | null | 所呈现字段的 SVG 边框元素。 |
clickTarget_ | protected |
元素 | null | 点击处理脚本绑定的元素。 |
constants_ | protected |
ConstantProvider | null | 与源代码块的渲染程序关联的常量。 |
DEFAULT_VALUE | T | null | 如需覆盖在“Field”(字段)中设置的默认值,请直接更新原型。 示例: |
|
可编辑 | 布尔值 | 可修改字段通常会显示某种界面,以表明它们可修改。序列化程序也会保存这些数据。 | |
enabled_ | protected |
布尔值 | 是否可以在可修改的块上使用编辑器更改字段值? |
fieldGroup_ | protected |
SVGGElement | null | 所呈现字段的 SVG 组元素。 |
isDirty_ | protected |
布尔值 | 是否需要重新渲染此块? |
maxDisplayLength | 数值 | 在添加省略号之前,要显示的文字的字符数上限。 | |
name? | 字符串 | (可选)字段名称。在每个分块中是唯一的。静态标签通常没有名称。 | |
NBSP |
|
(not declared) | 不间断空格。 |
SERIALIZABLE | 布尔值 | 序列化字段会由序列化程序保存,非序列化字段则不会。可修改的字段也应可序列化。默认情况下,情况并非如此,因此 SERIALIZABLE 是向后兼容的。 | |
size_ | protected |
尺寸 | 获取此字段的大小。由于 getSize() 和 updateSize() 会产生副作用,因此对于希望在设置/获取大小时调整字段边界,但又不触发不必要的渲染或其他副作用的子类,此方法可用作 shim。请注意,如果子类替换了 get 或 set 方法,则必须同时替换这两者;实现可以直接调用 super,但必须符合 JS 规范。 |
SKIP_SETUP |
|
唯一符号 | 用于指示字段的构造函数何时 *不应* 设置字段的值或运行 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 |
布尔值 | 该字段是否可见,还是因块被收起而处于隐藏状态? |
方法
方法 | 修饰符 | 说明 |
---|---|---|
applyColour() | 更新字段以与块的颜色/样式相匹配。 如果字段的颜色取决于块的颜色,非抽象子类可能需要实现此方法。系统会在相关时间自动调用该方法,例如在父块或渲染程序发生变化时。 如需了解详情,请参阅字段文档;如需查看示例,请参阅 FieldDropdown。 |
|
bindEvents_() | protected |
将事件绑定到该字段。如果子类需要执行自定义输入处理,则可以替换此方法。 |
canBeFocused() | 请参阅 IFocusableNode.canBeFocused。 | |
configure_(config) | protected |
处理传递给字段的配置映射。 |
createBorderRect_() | protected |
创建一个字段边框矩形元素。不得被子类替换。改为修改 initView 中的函数结果,或创建一个单独的函数进行调用。 |
createTextElement_() | protected |
创建一个字段文本元素。不得被子类替换。改为修改 initView 中的函数结果,或创建一个单独的函数进行调用。 |
dispose() | 处置属于此可编辑字段的所有 DOM 对象和事件。 | |
doClassValidation_(newValue) | protected |
在设置字段值的更改之前,先对其进行验证。如需查看子类实现示例,请参阅 **FieldDropdown**。 **注意**:验证会返回 |
doClassValidation_(newValue) | protected |
|
doValueInvalid_(_invalidValue, _fireChangeEvent) | protected |
用于通知字段输入的值无效。可由子类替换,请参阅 FieldTextInput。默认无操作。 |
doValueUpdate_(newValue) | protected |
用于更新字段的值。可由子类替换,以便自定义存储值/更新外部内容。 |
forceRerender() | 强制重新渲染此字段所在的块,这会重新渲染此字段并根据任何尺寸更改进行调整。同一块中的其他字段不会重新渲染,因为其大小已记录。 | |
fromJson(_options) | static |
子类应重新实现此方法,以便从 JSON 实参对象构造其 Field 子类。 如果字段子类尚未替换此方法,则尝试在 FieldRegistry 中注册该字段子类会出错。 |
fromXml(fieldElement) | 根据给定的 XML 元素设置字段的值。只能由 Blockly.Xml 调用。 | |
getAbsoluteXY_() | protected |
返回此字段左上角的绝对坐标。原点 (0,0) 是页面正文的左上角。 |
getBorderRect() | protected |
获取边框矩形元素。 |
getClickTarget_() | protected |
要将点击处理程序绑定到的元素。如果未明确设置,则默认为字段的 SVG 根。在可修改字段上点击此元素时,系统会打开编辑器。 |
getConstants() | 获取渲染程序常量提供程序。 | |
getDisplayText_() | protected |
获取此字段中要显示在版块上的文本。由于省略号和其他格式设置,可能与 getText 不同。 |
getFlipRtl() | 返回是否应在 RTL 中翻转字段。 | |
getFocusableElement() | 请参阅 IFocusableNode.getFocusableElement。 | |
getFocusableTree() | 请参阅 IFocusableNode.getFocusableTree。 | |
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() | 检查在来源代码块可修改时,是否可以使用编辑器更改此字段的值。 | |
isSerializable() | 检查此字段是否应由 XML 呈现程序序列化。处理向后兼容性和不一致状态的逻辑。 | |
isVisible() | 获取此可修改字段是否可见。 | |
loadLegacyState(callingClass, state) | 使用旧 XML 钩子(如果应使用)加载给定状态。返回 true 表示已处理加载;否则,返回 false。 | |
loadState(state) | 根据给定状态值设置字段的状态。应仅由序列化系统调用。 | |
onLocationChange(_) | 通知字段其位置已更改。 | |
onMouseDown_(e) | protected |
处理字段上的 pointerdown 事件。 |
onNodeBlur() | 请参阅 IFocusableNode.onNodeBlur。 | |
onNodeFocus() | 请参阅 IFocusableNode.onNodeFocus。 | |
onShortcut(_shortcut) | 处理给定的键盘快捷键。 | |
positionBorderRect_() | protected |
在更改大小后,调整字段的边框矩形的位置。 |
positionTextElement_(xOffset, contentWidth) | protected |
在更改大小后定位字段的文本元素。这同时处理 LTR 和 RTL 定位。 |
referencesVariables() | 此字段是否引用了任何 Blockly 变量。如果为 true,则在序列化和反序列化期间可能需要进行不同的处理。子类可以替换此方法。 | |
refreshVariableName() | 如果此字段引用变量,请刷新此字段引用的变量名称。 | |
render_() | protected |
由 getSize() 用于移动/调整任何 DOM 元素的大小,并获取新大小。 所有对块的大小/形状有影响的渲染都应在此处完成,并且应由 getSize() 触发。 |
repositionForWindowResize() | 用于在窗口大小调整期间重新定位 WidgetDiv 的开发者钩子。如果您的字段包含需要在窗口大小调整时重新定位的 WidgetDiv,则需要定义此钩子。例如,文本输入字段会定义此钩子,以便输入 WidgetDiv 可以在窗口大小调整事件中重新定位自己。如果已停用模态输入,这一点尤为重要,因为 Android 设备会在软键盘打开时触发窗口大小调整事件。 如果您希望 WidgetDiv 自行隐藏,而不是重新定位,请返回 false。这是默认行为。 DropdownDiv 已处理自己的定位逻辑,因此如果您的字段仅包含 DropdownDiv,则无需替换此函数。 |
|
saveLegacyState(callingClass) | protected |
返回 XML 状态的字符串化版本(如果应使用)。否则,它会返回 null,以指示该字段应使用自己的序列化。 |
saveState(_doFullSerialization) | 将此字段的值保存为可序列化为 JSON 的内容。应仅由序列化系统调用。 | |
setEnabled(enabled) | 设置在源代码块可修改时,是否可以使用编辑器更改此字段的值。 | |
setSourceBlock(block) | 将此字段附加到某个块。 | |
setTooltip(newTip) | 设置此字段的提示。 | |
setValidator(handler) | 为可修改字段设置新的验证函数,或清除之前设置的验证器。 验证器函数会接受新字段值,并返回经过验证的值。经过验证的值可以是输入值、输入值的修改版本,也可以是 null(用于中止更改)。 如果函数未返回任何值(或返回 undefined),系统会接受新值为有效值。这是为了允许字段使用经过验证的函数作为字段级更改事件通知。 |
|
setValue(newValue, fireChangeEvent) | 用于更改字段的值。处理验证和事件。子类应替换 doClassValidation_ 和 doValueUpdate_,而不是此方法。 | |
showEditor_(_e) | protected |
用于为字段创建编辑器的开发者钩子。此方法默认不执行任何操作,必须被替换才能创建编辑器。 |
toXml(fieldElement) | 将此字段的值序列化为 XML。只能由 Blockly.Xml 调用。 | |
updateEditable() | 添加或移除用于指明此字段是否可修改的界面。 | |
updateSize_(margin) | protected |
根据文本更新字段的大小。 |