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 与来源块的渲染程序相关联的常量。
CURSOR 字符串 鼠标光标样式:将鼠标悬停在热点上,即可启动编辑器。
DEFAULT_VALUE T |null

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

示例:FieldImage.prototype.DEFAULT_VALUE = null;

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

static

readonly

(未声明) 不间断空格。
可序列化 布尔值 可序列化字段由序列化器保存,不可序列化字段不是。可修改字段还应该可序列化。默认情况下,情况并非如此,因此 SERIALIZABLE 可向后兼容。
size_ protected 尺寸
SKIP_SETUP

static

readonly

唯一符号 一个值,用于指示字段的构造函数何时 *不* 应设置字段的值或运行 configure_,而应允许子类执行此操作。
sourceBlock_ protected 屏蔽 |null 阻止此字段附加到。以 null 形式开始,然后在 init 中设置。
textContent_ protected 文字 |null 呈现字段的文本内容元素。
textElement_ protected SVGTextElement |null 呈现字段的 SVG 文本元素。
validator_ protected FieldValidator&lt;T&gt;|null 在用户修改可修改字段时调用验证函数。
value_ protected T |null
visible_ protected 布尔值 该字段是可见的,还是因区块收起而隐藏的?

方法

方法 修饰符 说明
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 参数对象构造其 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() 返回字段是否可进行 Tab 导航。
isVisible() 获取此可修改字段是否可见。
loadLegacyState(callingClass, state) 使用旧版 XML 钩子(如果应该使用)加载指定状态。返回 true 表示已处理加载,否则返回 false。
onLocationChange(_) 通知字段位置已更改。
onMouseDown_(e) protected 处理字段上的 Pointdown 事件。
onShortcut(_shortcut) 处理指定的键盘快捷键。
positionBorderRect_() protected 更改大小后定位字段的边框矩形。
positionTextElement_(xOffset, contentWidth) protected 在大小发生更改后定位字段的文本元素。这会同时处理 LTR 和 RTL 定位。
render_() protected

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

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

repositionForWindowResize()

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

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

DropdownDivs 已自行处理其定位逻辑,因此如果您的字段只有 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 根据文本更新字段大小。