blockly > Field

Field 类

可修改字段的抽象类。

Signature:

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

实现了IKeyboardAccessibleIRegistrableISerializableIFocusableNode

构造函数

构造函数 修饰符 说明
(constructor)(value, validator, config) 构造 Field 类的新实例

属性

属性 修饰符 类型 说明
borderRect_ protected SVGRectElement | null 所呈现字段的 SVG 边框元素。
clickTarget_ protected 元素 | null 点击处理脚本绑定的元素。
constants_ protected ConstantProvider | null 与源代码块的渲染程序关联的常量。
DEFAULT_VALUE T | null

如需覆盖在“Field”(字段)中设置的默认值,请直接更新原型。

示例:FieldImage.prototype.DEFAULT_VALUE = null;

可编辑 布尔值 可修改字段通常会显示某种界面,以表明它们可修改。序列化程序也会保存这些数据。
enabled_ protected 布尔值 是否可以在可修改的块上使用编辑器更改字段值?
fieldGroup_ protected SVGGElement | null 所呈现字段的 SVG 组元素。
isDirty_ protected 布尔值 是否需要重新渲染此块?
maxDisplayLength 数值 在添加省略号之前,要显示的文字的字符数上限。
name 字符串 (可选)字段名称。在每个分块中是唯一的。静态标签通常没有名称。
NBSP

static

readonly

(not declared) 不间断空格。
SERIALIZABLE 布尔值 序列化字段会由序列化程序保存,非序列化字段则不会。可修改的字段也应可序列化。默认情况下,情况并非如此,因此 SERIALIZABLE 是向后兼容的。
size_ protected 尺寸 获取此字段的大小。由于 getSize() 和 updateSize() 会产生副作用,因此对于希望在设置/获取大小时调整字段边界,但又不触发不必要的渲染或其他副作用的子类,此方法可用作 shim。请注意,如果子类替换了 get 或 set 方法,则必须同时替换这两者;实现可以直接调用 super,但必须符合 JS 规范。
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 布尔值 该字段是否可见,还是因块被收起而处于隐藏状态?

方法

方法 修饰符 说明
applyColour()

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

如果字段的颜色取决于块的颜色,非抽象子类可能需要实现此方法。系统会在相关时间自动调用该方法,例如在父块或渲染程序发生变化时。

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

bindEvents_() protected 将事件绑定到该字段。如果子类需要执行自定义输入处理,则可以替换此方法。
canBeFocused() 请参阅 IFocusableNode.canBeFocused。
configure_(config) protected 处理传递给字段的配置映射。
createBorderRect_() protected 创建一个字段边框矩形元素。不得被子类替换。改为修改 initView 中的函数结果,或创建一个单独的函数进行调用。
createTextElement_() protected 创建一个字段文本元素。不得被子类替换。改为修改 initView 中的函数结果,或创建一个单独的函数进行调用。
dispose() 处置属于此可编辑字段的所有 DOM 对象和事件。
doClassValidation_(newValue) protected

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

**注意**:验证会返回 Tnullundefined 中的一种选项。**Field** 的实现绝不会返回 undefined,但如果新值与 T 兼容,则子类可以返回 undefined

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 根据文本更新字段的大小。