Strikte bereikregels afdwingen in JavaScript

Bij het werken met JavaScript in formulieren is het belangrijk dat u objecten en variabelen declareert in het bereik waarin u ze wilt gebruiken. Het globaal declareren van objecten of variabelen kan onnodige prestatieproblemen veroorzaken. Strikte bereikregels zijn geïntroduceerd in Designer 8.1 to om de runtime en het geheugengebruik van een formulier te verbeteren.

Wat is bereik in JavaScript?

Bereik is naar buiten gericht zodat alles binnen de accolades ({}) naar buiten kan kijken. Maar elementen buiten de accolades kunnen de elementen binnen de accolades niet benaderen.

In het volgende voorbeeld opent de eerste accolade het bereik van de functie en sluit de tweede accolade het bereik. Alles tussen de accolades valt binnen het bereik van foo ().

Het bereik in het volgende voorbeeld is geldig omdat var nFooVar = nOutsideVar binnen de accolades var nOutsideVar = 2 buiten de accolades kan zien.

In het volgende voorbeeld ziet u echter een ongeldig bereik, omdat var nOutsideVar = nFooVar geen toegang heeft tot var nFooVar =4 binnen de accolades.

Het bereik in scripts geeft aan welke stukjes script andere stukjes script kunnen benaderen. De stukjes script kunnen variabelen of functies zijn.

Wat is bereik in XML?

Bereik in een formulierontwerp heeft te maken met hiërarchie. Als u bijvoorbeeld het subformulier inside wilt benaderen in de volgende XML-bron, moet u outside.inside typen.

<subform name="outside"> 
    <subform name="inside"> 
    … 
    </subform> 
</subform>

U typt niet inside.outside omdat u het buitenste subformulier eerst moet benaderen en daarna naar een lager niveau gaat.

SOM-expressies en scope

In formulieren met als doelversie Acrobat of Adobe Reader 8.1 geeft u het bereik van SOM-expressies correct aan zoals in het voorbeeld hieronder:

    <subform name="a"> 
 
        <subform name="b"/>

In formulieren met als doelversie Acrobat of Adobe Reader 8.0 retourneert de SOM-expressie a.b.a het subformulier a. In formulieren met als doelversie Acrobat of Adobe Reader 8.1 retourneert de SOM-expressie a.b.a het subformulier null, omdat subformulier b geen onderliggend subformulier heeft met de naam a. In Acrobat of Adobe Reader 9.0 of hoger retourneert de expressie een fout, omdat a niet een geldig onderliggend subformulier is van b.

In Acrobat of Adobe Reader 8.1 worden functies en variabelen in het script van een knooppunt niet globaal (scriptobjecten worden wel globaal) zoals weergegeven in dit voorbeeld:

    <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> 

Als u klikt op field 2 in een formulier met als doelversie Acrobat of Adobe Reader 8.0, wordt de functie bar() uitgevoerd.

Als u klikt op field 2 in een formulier met als doelversie Acrobat of Adobe Reader 8.1, wordt de functie bar() niet uitgevoerd. De oorzaak is dat de functie bar() alleen beschikbaar is in het geïnitialiseerde script van field1.

Bereik en scriptobjecten

Scriptobjecten hebben een globaal bereik, daarom kunnen ze door elk element vanaf elke plaats worden benaderd. Als u een methode hebt die zowel field1.initialize als field2.click moet kunnen benaderen, plaatst u deze methode in een scriptobject. Strikte bereikregels betekenen dat u bar() niet overal in een formulier kunt aanroepen. Er kan ook een runtime-fout verschijnen, omdat de functie bar() niet kon worden opgelost. De scriptengine zocht naar bar() in het bereik waartoe u toegang hebt, en heeft niets gevonden.

Bereik en doelversie

Als u strikte bereikregels gebruikt, nemen de prestaties toe van formulieren die Acrobat of Adobe Reader 8.1 en hoger als doelversie hebben. Vermijd het gebruik van strikte bereikregels in formulieren die oudere versies van Acrobat of Adobe Reader als doelversie hebben. Anders kunnen de scripts in de formulieren verschillend werken. Maak bij bestaande formulieren een kopie voordat u strikte bereikregels inschakelt en controleer het script altijd achteraf. Als u strikte bereikregels inschakelt en vervolgens een lagere doelversie instelt dan Acrobat of Adobe Reader 8.1, worden er waarschuwingsberichten weergegeven.

Wanneer kunt u strikte bereikregels gebruiken

Als voor een formulier met als doelversie Acrobat of Adobe Reader 8.1 strikte bereikregels zijn ingeschakeld, worden gedeclareerde variabelen in JavaScript vrijgegeven nadat een script is uitgevoerd. Voor een formulier met als doelversie Acrobat of Adobe Reader 9.0 en hoger worden niet alle variabelen in JavaScript vrijgegeven door strikte bereikregels. De uitzondering is wanneer u nieuwe gegevens opnieuw samenvoegt of importeert.

De prestatieverbeteringen met strikte bereikregels gelden voor formulieren met als doelversie Acrobat of Adobe Reader 8.1 en hoger. Pas geen strikte bereikregels toe op formulieren die als doelversie Acrobat of Adobe Reader 8 of lager hebben. Anders is het mogelijk dat de scripts zich anders gedragen of niet werken.

Strikte bereikregels inschakelen

  1. Selecteer Bestand > Formuliereigenschappen en klik op het tabblad Standaardwaarden.

  2. Selecteer Strikte bereikregels toepassen in JavaScript en klik op OK.