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()建立參照目前子節點的獨立查詢清單

集合在每次讀取時經目前事件圖解析其擁有者,腳本物件跨事件保留的集合也不例外

既有集合反映重複 instance 的增刪與隱含屬性建立;獨立的重複 instance 保持各自的屬性子節點與值

擁有者已被移除的留存集合會拋出錯誤,而不是改投存活的或替換的 instance

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 集合參照的寫入更新真實綁定的資料值,並保留重複 instance 隔離;提交的值在 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 結構方法;腳本物件保留的集合在每次提交編輯之後與 rollback 之後都讀取目前事件圖

獨立副本

複製的子清單使用XFA 查詢節點集合所述的獨立儲存;其 append、insert 與 remove 方法更動的是那份獨立儲存

寫入任一清單參照的節點改動的都是真實原生節點,提交的值與屬性覆寫在儲存的 XDP 與原生 PDF 外觀產生中持久存在

Data DOM 子集合也提供帶獨立條目儲存的 clone();其既有的結構化 append、insert、remove 方法繼續更動原生資料樹

交易與限制

存續集合物件與獨立副本共用事件集合配置限制、操作檢查與交易時限

未捕捉的事件錯誤或預算失敗會一併還原原生值、重複 instance、留存腳本狀態、獨立清單儲存與 journal 狀態

表單與屬性的存續集合是唯讀的;直接指派、刪除、屬性重定義、原型變更與阻止擴充都會拋出錯誤

Data DOM 集合拒絕對規範數字條目的寫入、刪除與重定義,同時保留其既有的具名結構方法與一般非數字屬性行為

涵蓋範圍

本介面暴露目前的表單與屬性子集合以及獨立的子清單副本

通用 template/表單節點建立、遞迴節點複製、子樹插入移除以及更多節點類別綁定仍是獨立工作

交易化 XFA Data DOM 結構 · XFA widget 執行期