原生 XFA Property DOM

启用 EnableJavaScript 的一般执行会把表单容器的属性子节点纳入实时事件树,包括 value、typed value、font、fill、color、ui、border 和 edge 节点

命名容器在 SOM 路径中使用其名称;属性节点使用其类名,并保留实际的 name 属性——通常为空

类型化值与属性

const field = xfa.resolveNode("main.row[1].cell");
field.value.text.value = "25";
field.font.size = "18pt";
field.font.fill.color.value = "0,128,255";
field.ui.textEdit.multiLine = "1";
field.resolveNode("border.edge[1]").thickness = "3pt";
field.font.setAttribute("saved", "custom");
const saved = field.font.getAttribute("custom");

row[1].cell.value.text.value = 25
row[1].cell.font.size = "18pt"

字段 value 节点下的类型化子节点与字段的实时 rawValue 共享;通过 value.text.value、field.rawValue 和绑定的 dataNode 进行的读写相互即时可见

对带 value 属性的属性节点(如 color),value 属性读写该属性;对标量内容节点,value 读写文本内容

生效属性绑定中存在的属性以直接属性形式暴露,保留的节点与引擎成员除外;getAttribute(name) 读取任意属性,setAttribute(value, name) 写入一个属性并立即暴露安全的新名称

FormCalc 通过同一事件树解析属性路径并赋值标量属性;属性同级节点支持 occurrence 索引和类选择器

原生持久化与渲染

成功的写入会在匹配容器 occurrence 之下的原生表单包中创建或更新属性节点;模板和其他重复 occurrence 保留各自默认值

属性查找沿命名容器之下的类与本地 occurrence 进行,而不是跳过未命名节点;修改属性的 name 属性保留其标识,保存的 XDP 重载后生效覆盖仍然存在

保留的属性句柄按已发布的 owner 标识跟随实例插入与移动;在实例被移除后写句柄会中止并恢复事务

字体 typeface 和 size 参与每实例的弹性文本测量与重排;flatten 为每个字段 occurrence 读取生效的字体、颜色、边框、段落和受支持的 UI 属性

富文本 draw 为每个 occurrence 消费生效的字体、段落、行内 CSS 和标量内容覆盖,包括其测量与 run 摆放

实例创建保留全部属性同级默认值,包括多个 edge 节点,并使用模板属性值而非另一 occurrence 的覆盖

UI 覆盖创建受支持的 widget 选项,并在事件成功后改变实际的每实例运行时类型和原生字段标志

预算与更低层绑定

属性遍历共享事件的节点、深度、操作和字节预算;原生文本与属性写入遵守 MaxValueChars,写入失败恢复原生字段值、属性覆盖、脚本状态和实例顺序

直接调用方使用 xebdProperty 并提供 Attributes 与 DefaultAttributes;后者用于初始化新克隆的节点

属性 attribute 动作在 TXFAEventAction.Value 中包含属性名、NUL 分隔符和值;TXFAWidgetRuntime 验证并应用到原生属性目标

覆盖范围

事件树包含已声明的属性节点及其生效属性,并为受支持的格式化与 widget 类提供 schema 默认值;缺失属性创建现在能在原生表单包中物化受支持的格式化路径

event、calculate 和 validate 声明仍是执行元数据;variables 脚本仍是脚本对象,一般属性编辑不会激活元数据脚本

更多 schema 属性类、通用删除与重新挂载父级、命名空间限定属性修改、更多布局属性消费者以及更进一步的富文本或 widget 编辑功能仍是独立目标

Related APIs

Live SOM Resolution, Native Data DOM, HPDFXFAResolveFormInstanceProperty 和 Interactive XFA Runtime