FormCalc Values and References
启用 EnableJavaScript 的一般 FormCalc 执行通过 Ref(value) 实现显式对象引用,而普通变量声明和普通函数参数复制对象值
Ref 参数与结果
对既有表单对象的访问器成为对象句柄;传入既有句柄保留其标识,null 参数产生 null 句柄,其他标量参数返回其标量值
引用提供普通节点属性和方法,如 rawValue、parent、name、resolveNode 和 resolveNodes
标量内置参数解引用句柄,聚合函数消费被引用值,null 句柄保留 null 的算术与字符串语义;Exists 对 null 句柄返回 0
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
第一段把 target 的先前值保留到 copied;第二段通过两个指向同一对象的句柄写入 target
赋值与脱钩
| 赋值 | 行为 |
|---|---|
p = Ref(other) | 把 p 重新绑定到 other 对象 |
p = 5(p 是引用时) | 向被引用对象写入 5 并保留句柄 |
p = Null()(p 是引用时) | 清除被引用对象的值并保留句柄 |
p = Ref(Null()) | 使 p 脱钩,变量获得 null 值 |
p = 5(脱钩后) | 把变量本身设为 5 |
变量重复声明和用户函数参数适用同样的复制或引用规则;函数可以接收、返回和限定显式引用
相等与标识
两个操作数都是引用时,相等与不等比较稳定对象标识;普通对象操作数比较其值,结果为数字 1 或 0
包含相同文本的两个字段按值相等,但 Ref(first) eq Ref(second) 在它们是不同字段时返回 0
重复实例与保留句柄
脚本对象可以跨事件保留显式句柄;句柄按稳定标识解析当前表单节点,因此重排重复 subform 会保留选中的 occurrence
occurrence 被移除后继续使用句柄会引发错误;该错误中止事件时,运行时事务恢复 occurrence 计数、字段值和脚本对象状态
运行时自动提供稳定的模板与数据标识;省略 TXFAEventBinding.Identity 的直接事件调用方获得唯一绑定索引标识,绑定顺序可能变化时应提供显式稳定标识
迁移
早期一般执行在变量声明中保留普通节点对象;当 p 必须保持节点句柄时,把 var p=target 改为 var p=Ref(target)
一般 FormCalc 相等结果现在使用 1 和 0 而非 JavaScript 布尔文本;拼接相等结果的代码应预期数字表示
Related APIs
Dynamic Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding 和 Interactive XFA Runtime