Scope de eventos JavaScript de XFA

Unit: HPDFXFAEventScript, integrado a través de HPDFXFARuntime

Aliases con nombre y declaraciones locales

El host de eventos resuelve los nodos de formulario con nombre elegibles en el scope de eventos externo; un evento puede seguir usando input.rawValue cuando input es un campo con nombre accesible

El body del evento de usuario tiene su propio scope de función JavaScript, así que las declaraciones const, let y class pueden hacer shadowing de un alias de campo sin conflicto con las declaraciones de variables generadas por el host

const input = xfa.resolveNode("main.input");
input.rawValue = "saved";

Las declaraciones locales var y function también usan las reglas ordinarias de scope de JavaScript; los bindings locales explícitos hacen shadowing de un alias externo, y un binding léxico permanece no disponible antes de su inicialización

Los nombres reservados del host y los identificadores inválidos siguen excluidos de los aliases automáticos de campos; xfa.resolveNode aporta lookup explícito para esos nombres

Contexto de ejecución y strict mode

El this del body del evento sigue siendo el nodo de formulario en ejecución, y un valor de retorno explícito sigue fluyendo al procesamiento de finalización calculate o validate

Una directiva use strict inicial ahora permanece como directiva del body del usuario; asignar una variable no declarada lanza una excepción en lugar de crear un binding global

"use strict";
const local = "value";
xfa.resolveNode("main.input").rawValue = local;

Transacciones y lifetime

Un error de sintaxis, un ReferenceError de temporal dead zone o un ReferenceError de strict mode aborta el evento y restaura su instantánea nativa de form/datasets, incluidas las escrituras realizadas antes de un runtime error

Las escrituras nativas exitosas sobreviven a la recarga del XDP guardado; las variables locales del evento pertenecen a esa invocación, mientras que los objetos de script variables conservan su estado léxico persistente establecido y su comportamiento de closures

El scope anidado no agrega llamadas de transporte del host ni cambia los presupuestos de script, memoria, operaciones y replay

APIs relacionadas

HPDFXFAExecuteJavaScriptEvent, Runtime XFA interactivo y Creación de propiedades ausentes nativa