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