Valores y referencias de FormCalc
La ejecución general de FormCalc con EnableJavaScript implementa referencias explícitas a objetos mediante Ref(value), mientras que las declaraciones ordinarias de variables y los argumentos ordinarios de funciones copian valores de objetos
Parámetros y resultado de Ref
Un accessor hacia un objeto de formulario existente se convierte en un handle de objeto; pasar un handle existente preserva su identidad, un argumento null produce un handle null, y los demás argumentos escalares devuelven su valor escalar
Las referencias proveen propiedades y métodos ordinarios de nodos como rawValue, parent, name, resolveNode y resolveNodes
Los argumentos escalares de built-ins desreferencian los handles, las funciones agregadas consumen los valores referenciados, y los handles null retienen la semántica null de aritmética y strings; Exists devuelve 0 para un handle null
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
El primer bloque preserva el valor previo de target en copied; el segundo bloque escribe target a través de dos handles que refieren al mismo objeto
Asignación y desvinculación
| Asignación | Comportamiento |
|---|---|
p = Ref(other) | Reenlaza p al otro objeto |
p = 5 cuando p es una referencia | Escribe 5 en el objeto referenciado y preserva el handle |
p = Null() cuando p es una referencia | Limpia el valor del objeto referenciado y preserva el handle |
p = Ref(Null()) | Desvincula p y le da a la variable un valor null |
p = 5 tras la desvinculación | Establece la variable misma en 5 |
Las redeclaraciones de variables y los argumentos de funciones de usuario aplican las mismas reglas de copia o referencia; las funciones pueden recibir, devolver y calificar referencias explícitas
Igualdad e identidad
La igualdad y la desigualdad comparan la identidad estable de objetos cuando ambos operandos son referencias; los operandos ordinarios de objetos comparan sus valores, y el resultado es numérico 1 o 0
Dos campos que contienen el mismo texto se comparan iguales por valor, pero Ref(first) eq Ref(second) devuelve 0 cuando son campos distintos
Instancias repetidas y handles retenidos
Un script object puede retener un handle explícito entre eventos; el handle resuelve el nodo actual del formulario por identidad estable, de modo que reordenar un subform repetido preserva la ocurrencia seleccionada
Usar un handle después de que su ocurrencia fue eliminada lanza un error; las transacciones del runtime restauran el conteo de ocurrencias, los valores de campos y el estado de script objects cuando ese error aborta el evento
El runtime suministra automáticamente identidades estables de plantilla y datos; los llamadores directos de eventos que omiten TXFAEventBinding.Identity reciben una identidad única de índice de binding y deberían suministrar identidades estables explícitas cuando el orden de bindings cambie
Migración
La ejecución general anterior retenía objetos ordinarios de nodos en las declaraciones de variables; reemplaza var p=target por var p=Ref(target) cuando p deba seguir siendo un handle de nodo
Los resultados de igualdad del FormCalc general ahora usan 1 y 0 en lugar de texto booleano JavaScript; el código que concatenaba resultados de igualdad debe esperar la representación numérica
APIs relacionadas
Dynamic Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding y Runtime XFA interactivo