blockly > 字段

Field 类

可编辑字段的抽象类。

Signature:

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

实现IASTNodeLocationSvgIASTNodeLocationWithBlockIKeyboardAccessibleIRegistrableISerializable

构造函数

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

属性

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

要覆盖 **字段**中设置的默认值,请直接更新原型。

示例: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) protected 用于通知字段输入的值无效。可由子类替换,请参阅 FieldTextInput。默认情况下不执行任何操作。
doValueUpdate_(newValue) protected 用于更新字段的值。可由子类替换,以对值进行自定义存储/更新外部内容。
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 根据文本更新字段大小。