Cuando utilice JavaScript en formularios, es importante que declare los objetos y las variables dentro del ámbito en el que fueron pensados. La declaración innecesaria de objetos o variables de forma global puede provocar errores en el rendimiento. Las normas estrictas de creación de ámbitos se incluyeron en Designer 8.1 para mejorar el uso de memoria y el rendimiento en tiempo de ejecución de un formulario.
¿Qué es el ámbito en JavaScript?
El ámbito funciona "hacia fuera", de forma que todo lo que se encuentra entre llaves ({}) puede acceder a lo aparezca fuera de ellas. Sin embargo, nada de lo que esté fuera de las llaves puede acceder al interior de ellas.
En el siguiente ejemplo, la primera llave abre el ámbito de la función y la segunda, lo cierra. Todo lo que se encuentra entre llaves está dentro del ámbito de la función foo().
El ámbito del siguiente ejemplo es válido porque la función que aparece entre llaves, var nFooVar = nOutsideVar, puede acceder a la función que está fuera de ellas, var nOutsideVar = 2.
Por el contrario, el siguiente ejemplo muestra un ámbito no válido porque la función var nOutsideVar = nFooVar no puede acceder a la función que aparece entre llaves, var nFooVar =4.
El ámbito en las secuencias de comandos describe fragmentos de secuencias de comandos que pueden acceder a otros fragmentos. Los fragmentos de secuencias de comandos pueden ser variables o funciones.
¿Qué es el ámbito XML?
El ámbito en un diseño de formulario depende de la jerarquía. Por ejemplo, para acceder al interior del subformulario en el siguiente código fuente XML, deberá escribir interior.exterior.
<subform name="outside">
<subform name="inside">
…
</subform>
</subform>
No escriba interior.exterior porque primero debe acceder al subformulario más externo y avanzar hacia el interior.
Expresiones SOM y ámbito
En los formularios dirigidos a Acrobat o Adobe Reader 8.1, el ámbito se crea correctamente en las expresiones SOM como se muestra en el siguiente ejemplo:
<subform name="a">
<subform name="b"/>
En los formularios dirigidos a Acrobat o Adobe Reader 8.0, la expresión SOM a.b.a devuelve el subformulario a. En los formularios dirigidos a Acrobat o Adobe Reader 8.1, la expresión SOM a.b.a devuelve null porque el subformulario b no tiene un elemento secundario llamado a. En Acrobat o Adobe Reader 9.0 o posterior, la expresión devuelve un error porque a no es un elemento secundario válido de b.
En Acrobat o Adobe Reader 8.1, las funciones y variables dentro de la secuencia de comandos de un nodo no son globales (con la excepción de los objetos de secuencia de comandos), tal y como se muestra en este ejemplo:
<field name="field1">
event activity="initialize">
<script contentType="application/x-javascript">
// Function bar() is scoped to field1.initialize; nothing outside <event activity="initialize"> scope can see inside here (in 8.1)
function bar()
{
return "bar";
}
</script>
</event>
/field>
field name="field2">
<event activity="click">
<script contentType="application/x-javascript">
field1.bar();
</script>
</event>
</field>
Al hacer clic en field 2 en un formulario dirigido a Acrobat o Adobe Reader 8.0, se ejecuta la función bar().
Al hacer clic en field 2 en un formulario dirigido a Acrobat o Adobe Reader 8.1, no se ejecuta la función bar(). El motivo es que la función bar() solo está disponible desde la secuencia de comandos inicializada de field1.
Creación de ámbitos y objetos de secuencia de comandos
Los objetos de secuencia de comandos tienen un ámbito global. Así pues, cualquier persona puede acceder a ellos desde cualquier parte. Si tiene un método al que deben acceder tanto field1.initialize como field2.click, colóquelo en un objeto de secuencia de comandos. Las normas estrictas de creación de ámbitos implican que no se puede llamar a bar() desde ninguna parte del formulario. También se muestra un error en tiempo de ejecución que indica que la función bar() no se puede resolver. El motor de secuencias de comandos ha buscado bar() dentro del ámbito al que el usuario tiene acceso, pero no lo ha encontrado.
Creación de ámbitos y versión de destino
Si utiliza las normas estrictas de creación de ámbitos, tenga en cuenta que obtendrá mejoras en el rendimiento en los formularios dirigidos a Acrobat o Adobe Reader 8.1 y posterior. Evite usar las normas estrictas de creación de ámbitos en los formularios dirigidos a versiones anteriores de Acrobat o Adobe Reader. De no ser así, las secuencias de comandos de los formularios pueden funcionar de manera diferente. En cuanto a los formularios existentes, realice una copia de seguridad del formulario antes de activar las normas estrictas de creación de ámbitos y, a continuación, verifique siempre la secuencia de comandos. Si activa las normas estrictas de creación de ámbitos y cambia la versión de destino a una anterior a Acrobat o Adobe Reader 8.1, aparecerán mensajes de advertencia.
Utilización de los ámbitos
Cuando las normas estrictas de creación de ámbitos están activadas en un formulario dirigido a Acrobat o Adobe Reader 8.1, las variables declaradas de JavaScript se liberan después de la ejecución de cada secuencia de comandos. En un formulario dirigido a Acrobat o Adobe Reader 9.0 y posterior, las normas estrictas de creación de ámbitos no liberan todas las variables de JavaScript. La excepción se produce cuando vuelva a combinar o importe datos nuevos.
Las mejoras en el rendimiento producidas por las normas estrictas de creación de ámbitos se aplican a los formularios dirigidos a Acrobat o Adobe Reader 8.1 y posterior. No aplique las normas estrictas de creación de ámbitos dirigidas a versiones de Acrobat o Adobe Reader anteriores a la versión 8. De lo contrario, las secuencias de comandos pueden tener un comportamiento diferente o no funcionar.
Activar las normas estrictas de creación de ámbitos
Seleccione Archivo > Propiedades del formulario y haga clic en la ficha Predeterminados.
Seleccione Respetar normas estrictas de creación de ámbitos en JavaScript y, a continuación, haga clic en Aceptar.