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 los valores de objetos
Parámetros y resultado de Ref
Un accesor 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 proporcionan propiedades y métodos ordinarios de nodos como rawValue, parent, name, resolveNode y resolveNodes
Los argumentos escalares de built-ins desreferencian handles, las funciones agregadas consumen valores referenciados, y los handles null conservan la semántica aritmética y de cadenas de null; 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 conserva el valor previo de target en copied; el segundo bloque escribe target a través de dos handles que apuntan al mismo objeto
Asignación y desligado
| Asignación | Comportamiento |
|---|---|
p = Ref(other) | Religa 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()) | Desliga p y da a la variable un valor null |
p = 5 tras el desligado | 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 cualificar referencias explícitas
Igualdad e identidad
La igualdad y la desigualdad comparan 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 con 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 de formulario actual por identidad estable, de modo que reordenar un subform repetido preserva la ocurrencia seleccionada
Usar un handle después de eliminar su ocurrencia lanza un error; las transacciones en runtime restauran el recuento de ocurrencias, los valores de campos y el estado de script objects cuando ese error aborta el evento
El runtime suministra identidades estables de plantilla y de datos automáticamente; los llamadores directos de eventos que omitan TXFAEventBinding.Identity reciben una identidad única de índice de binding y deberían suministrar identidades estables explícitas cuando el orden de binding cambie
Migración
La ejecución general anterior retenía objetos de nodo ordinarios 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 de FormCalc general usan ahora 1 y 0 en lugar de texto booleano de JavaScript; el código que concatenaba resultados de igualdad debe esperar la representación numérica
APIs relacionadas
Dynamic Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding y Interactive XFA Runtime