原生 XFA Data DOM

啟用 EnableJavaScript 的一般執行,會透過 xfa.datasets、$data 與 $record 解析路徑以及 FormCalc 存取子,公開文件的原生資料集樹

資料節點使用穩定的原生識別,並與表單節點共用同一個即時 SOM 解析器;支援名稱、類別選擇器、出現個體選取、父節點走訪、述詞與節點層級解析

根節點與類別

物件或路徑意義
xfa.datasetsdatasets 封包節點,不存在時為 null
xfa.datasets.data 與 $datadatasets 封包底下的資料根節點
$record目前非記錄處理模型中,位於 data 底下的第一個記錄根節點
dataGroup含子元素的資料元素,包括明確宣告的空群組
dataValue攜帶值的資料元素
formNode.dataNode繫結到表單欄位或子表單的節點,沒有資料繫結時為 null

XFA 資料命名空間中的 dataNode 屬性可以明確選取群組或值的類別;命名空間字首會被解析,不要求特定拼法

讀取與寫入

dataValue 把 value 公開為 rawValue 的可寫別名;兩個存取子更新的是同一個繫結資料儲存格與原生資料節點

const value = xfa.resolveNode("$record.row[1].cell");
value.rawValue = "25";
target.rawValue = xfa.resolveNode("main.row[1].cell").rawValue;

$record.row[1].cell = 25
target = row[1].cell
var p = Ref($record.row[1].cell)
p = 30

繫結欄位的寫入會立即更新對應的資料值,資料值的寫入也會在同一腳本內立即反映到繫結欄位的讀取;原生發布寫的是實際的資料節點

實體化的純量值屬性會在欄位或資料寫入後同步其原生表單內容,包括共用資料的別名與新的重複執行個體資料發布

沒有繫結表單欄位的資料元素仍可存取與寫入;成功的交易會把變更保存在已儲存的 XDP 中

bind match=none 的表單欄位保留範本預設值,並把編輯存放在自己出現個體的 Form DOM 值中;它們不會公開合成資料節點,也不會修改兄弟出現個體

資料值與表單事件宿主共用 Unicode、值大小與執行預算;群組節點提供的是結構存取,而不是可寫的原始值

重複執行個體與保留參考

表單執行個體的插入、移動與移除會在同一腳本內更新對應的即時 Data DOM;新的隱含繫結列在發布前,會透過其資料節點公開範本預設值

零出現個體的原型可以建立自己的第一個資料群組與值;原生發布會為新節點提供真實識別,讓 script object 能在後續事件中保留資料 handle

保留的資料參考以識別跟隨移動;在所屬群組被移除後使用該參考會讓事件失敗,執行階段回復會還原原生出現個體順序、值與 script object 計數器

script object 保留的執行個體管理員會解析目前的範圍,包括初始出現個體數為零的管理員

原生 XML 內容

datasets、dataGroup 與 dataValue 節點公開loadXML 與 saveXML,具備原生解析、同腳本圖形更新與交易式發布

XML 匯入保留註解、處理指示、CDATA、展開的命名空間與 Unicode 名稱,同時把非文字節點排除在一般 Data DOM 子節點選取與可見欄位值之外

匯入的值會立即同步繫結欄位的讀取,包括現有 dataRef 選取不同後綴的欄位,以及先前無法解析、現在變可用的目標

交易與低階呼叫端

TXFAWidgetRuntime 會建立資料域繫結、把表單欄位連到原生資料值、套用資料寫入與新的識別繫結,並在引擎或原生發布失敗後還原精確的 XDP 狀態

低階事件呼叫端使用TXFAEventBindingDomain 以及 TXFAEventBinding 的 DataIdentity 與 DataBindingEnabled 欄位,提供等效的物件關係

xeakBindDataIdentity 動作把新的虛擬資料 handle 綁到其發布的原生資料識別;低階應用程式必須以交易方式套用回傳的資料變更與識別繫結

其餘物件模型涵蓋

記錄視窗導覽、獨立的資料節點建立與重新掛父、任意資料屬性,以及完整的範本 property 節點編輯,仍是另外的整合目標

執行個體鏡射沿用既有的隱含資料繫結執行個體管理員行為;更多明確繫結的執行個體變更需要進一步的繫結整合

相關 API

即時 SOM 路徑、FormCalc 參考、HPDFXFAExecuteJavaScriptEvent 與互動式 XFA 執行環境