FormCalc 值與參考
啟用 EnableJavaScript 的一般 FormCalc 執行,透過 Ref(value) 實作明確的物件參考;一般變數宣告與一般函式引數則複製物件值
Ref 參數與結果
對既有表單物件的存取會變成物件 handle;傳入既有 handle 保留其識別,null 引數產生 null handle,其他純量引數回傳其純量值
參考提供一般的節點屬性與方法,例如 rawValue、parent、name、resolveNode 與 resolveNodes
純量內建函式的引數會解參考 handle,聚合函式消耗被參考的值,null handle 保留 null 的算術與字串語意;Exists 對 null handle 回傳 0
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
第一段把 target 的先前值保存在 copied;第二段透過兩個指向同一物件的 handle 寫入 target
指派與解綁
| 指派 | 行為 |
|---|---|
p = Ref(other) | 把 p 重新綁到另一個物件 |
p 是參考時的 p = 5 | 把 5 寫入被參考的物件,並保留 handle |
p 是參考時的 p = Null() | 清空被參考物件的值,並保留 handle |
p = Ref(Null()) | 把 p 解綁,變數取得 null 值 |
解綁後的 p = 5 | 把變數本身設為 5 |
變數重複宣告與使用者函式引數套用同一套複製或參考規則;函式可以接收、回傳並限定明確參考
相等與識別
兩個運算元都是參考時,相等與不等比較的是穩定的物件識別;一般物件運算元比較其值,結果為數字 1 或 0
兩個內容相同的欄位按值比較為相等,但兩個不同欄位的 Ref(first) eq Ref(second) 回傳 0
重複執行個體與保留 handle
script object 可以跨事件保留明確 handle;handle 以穩定識別解析目前的表單節點,因此重排重複子表單會保留所選出現個體
在出現個體被移除後使用 handle 會擲出錯誤;該錯誤中止事件時,執行階段交易會還原出現個體數、欄位值與 script object 狀態
執行環境自動提供穩定的範本與資料識別;省略 TXFAEventBinding.Identity 的直接事件呼叫端會取得唯一的繫結索引識別,繫結順序可能改變時應提供明確的穩定識別
遷移
較早的一般執行會在變數宣告中保留一般節點物件;p 必須維持節點 handle 時,請把 var p=target 改寫成 var p=Ref(target)
一般 FormCalc 的相等結果現在用 1 與 0,而不是 JavaScript 布林文字;串接相等結果的程式碼應預期數字表示
相關 API
動態 Eval、HPDFXFACompileFormCalcEvent、TXFAEventBinding 與互動式 XFA 執行環境