XFA 存活子集合
JavaScript 与 FormCalc 事件可以通过只读的 nodes 属性检视表单节点或属性节点当前的子节点
const field = xfa.resolveNode("row[1].amount");
const children = field.font.nodes;
const snapshot = children.clone();
field.font.fill.color.value = "192,48,96";
const fill = children.item(0);
读取当前子节点
| 成员 | 行为 |
|---|---|
length | 当前子节点数量 |
item(index) | 该从零开始索引处的当前子节点,负数、非整数或越界索引返回 null |
namedItem(name) | 第一个该字面名称的当前子节点,无匹配时为 null |
nodes[index] | 与 item(index) 相同的当前节点 |
for...of | 按当前顺序读取子节点 |
clone() | 创建引用当前子节点的独立查询列表 |
集合在每次读取时经当前事件图解析其拥有者,脚本对象跨事件保留的集合也不例外
既有集合反映重复实例的增删和隐式属性创建;独立的重复实例保持各自的属性子节点与值
拥有者已被移除的留存集合会抛出错误,而不是改投存活的或替换的实例
FormCalc 访问
FormCalc 把 nodes 识别为表单、属性和 Data DOM 节点上的子集合属性
if (xfa.record.nodes.length >= 2) then
xfa.record.nodes.item(1).nodes.namedItem("amount").rawValue = "Updated"
endif
直接的 length、item(index)、namedItem(name) 和 clone() 成员链使用与 JavaScript 相同的当前原生节点和集合限制
表单、属性和 Data DOM 子集合在 JavaScript 与 FormCalc 中都支持直接的 nodes[index] 读取
集合索引从零开始;for...of 仍是 JavaScript 语法
经 FormCalc 集合引用的写入更新真实绑定的数据值,并保留重复实例隔离;提交的值在 XDP 保存、运行时重新加载和原生 PDF 外观生成后仍然存活
Data DOM 数字索引
const rows = xfa.record.nodes;
rows[1].nodes[0].rawValue = "Updated";
"0"、"1" 这类规范的非负整数键解析当前 Data DOM 子节点,超出集合时返回 null;"01"、"-0"、"1.0" 这类非规范键不别名数字条目
JavaScript 的 index in nodes 检查当前子节点数,直接赋值、删除或重定义规范数字条目会抛出 TypeError
同样的数字条目限制适用于在词法状态中保留该集合的脚本对象函数内部,也适用于另一事件读取该函数返回的集合时
重排或移除子节点请用既有的 Data DOM 结构方法;脚本对象保留的集合在每次提交编辑之后和回滚之后都读取当前事件图
独立克隆
克隆的子列表使用 XFA 查询节点集合所述的独立存储;其 append、insert 和 remove 方法改动的是那份独立存储
写入任一列表引用的节点改动的都是真实原生节点,提交的值与属性覆盖在保存的 XDP 和原生 PDF 外观生成中持久存在
Data DOM 子集合也提供带独立条目存储的 clone();其既有的结构化 append、insert、remove 方法继续改动原生数据树
事务与限制
存活集合对象与独立克隆共享事件集合分配限制、操作检查和事务时限
未捕获的事件错误或预算失败会一并恢复原生值、重复实例、留存脚本状态、独立列表存储和 journal 状态
表单与属性的存活集合是只读的;直接赋值、删除、属性重定义、原型变更和阻止扩展都会抛出错误
Data DOM 集合拒绝对规范数字条目的写入、删除和重定义,同时保留其既有的具名结构方法和普通非数字属性行为
覆盖范围
本接口暴露当前的表单与属性子集合以及独立的子列表克隆
通用 template/表单节点创建、递归节点克隆、子树插入移除以及更多节点类绑定仍是独立工作