Regole di ambito restrittive in JavaScript

Durante l'impiego di JavaScript per la creazione di moduli, è importante dichiarare gli oggetti e le variabili all'interno dell'ambito appropriato. Dichiarare globalmente oggetti o variabili quando ciò non è necessario può pregiudicare le prestazioni. L'ambito restrittivo è stato introdotto in Designer 8.1 per migliorare la fase di esecuzione e l'uso di memoria di un modulo.

Che cosa si intede per ambito in JavaScript?

L'ambito definisce uno spazio che ha accesso all'esterno, in modo che tutti gli elementi compresi fra parentesi graffe ({}) possono accedere a quanto è fuori. Tuttavia, qualsiasi cosa posta all'esterno di tali parentesi non ha accesso alcuno agli elementi all'interno.

Nell'esempio seguente, la prima parentesi graffa apre l'ambito della funzione, la seconda lo chiude. Tutto ciò che è posto fra le due parentesi è considerato interno all'ambito di foo ().

Nell'esempio seguente, l'ambito è valido perché l'espressione var nFooVar = nOutsideVar racchiusa fra parentesi graffe è in grado di accedere a var nOutsideVar = 2 all'esterno di tali parentesi.

Al contrario, l'esempio riportato di seguito mostra un ambito non valido perché var nOutsideVar = nFooVar non è in grado di accedere a var nFooVar =4 all'interno delle parentesi graffe.

Nel linguaggio di script, l'ambito descrive pezzi di script con accesso ad altri pezzi. I pezzi possono essere variabili o funzioni.

Che cos'è l'ambito XML?

In riferimento alla struttura del modulo, l'ambito riguarda la gerarchia. Ad esempio, per accedere al sottomodulo inside nell'origine XML presentata di seguito, è necessario digitare outside.inside.

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

L'utente non digita inside.outside perché è necessario accedere innanzitutto al sottomodulo più esterno, quindi penetrare all'interno.

Espressioni SOM e ambito

Nei moduli destinati ad Acrobat o Adobe Reader 8.1, l'ambito delle espressioni SOM è delimitato opportunamente come mostrato nell'esempio:

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

Nei moduli per Acrobat o Adobe Reader 8.0, l'espressione SOM a.b.a restituisce il sottomodulo a. Nei moduli per Acrobat o Adobe Reader 8.1, l'espressione SOM a.b.a restituisce null perché il sottomodulo b non dispone di un elemento secondario denominato a. In Acrobat o Adobe Reader 9.0 o versioni successive, l'espressione restituisce un errore perché a non è un elemento secondario valido di b.

In Acrobat o Adobe Reader 8.1, funzioni e variabili contenute all'interno dello script di un nodo non diventano globali (unica eccezione per gli oggetti script), come mostrato nell'esempio:

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

Se si fa clic su field 2 in un modulo per Acrobat o Adobe Reader 8.0, viene eseguita la funzione bar().

Se si fa clic su field 2 in un modulo per Acrobat o Adobe Reader 8.1, non viene eseguita la funzione bar(). Ciò si verifica perché la funzione bar() è disponibile solo dall'interno dello script inizializzato di field1.

Delimitazione dell'ambito e oggetti script

Gli oggetti script hanno un ambito globale. Di conseguenza, qualsiasi elemento può accedervi, a prescindere dalla posizione. Se si dispone di un metodo al quale si desidera consentire l'accesso da parte di field1.initialize e field2.click, posizionarlo in un oggetto script. L'ambito restrittivo implica l'impossibilità di richiamare bar() da un punto qualsiasi del modulo. Inoltre, viene restituito un errore in fase di esecuzione per indicare che è impossibile risolvere la funzione bar(). Il modulo di gestione script ha eseguito con esito negativo la ricerca di bar() all'interno dell'ambito di accesso consentito.

Delimitazione dell'ambito e versione di destinazione

Tenere presente che la funzione di ambito restrittivo, qualora utilizzata, comporta miglioramenti nelle prestazioni dei moduli destinati ad Acrobat o Adobe Reader 8.1 e versioni successive. Evitare di usare l'ambito restrittivo in moduli destinati alle versioni precedenti di Acrobat o Adobe Reader 8.1. In caso contrario, gli script dei moduli potrebbero funzionare in modo anomalo. Per i moduli esistenti, procedere al backup del modulo prima di attivare l'ambito restrittivo e, successivamente, verificare sempre lo script. Quando si attiva l'ambito restrittivo e si modifica la versione di destinazione a una precedente ad Acrobat o Adobe Reader 8.1, compare un messaggio di avviso.

Quando utilizzare l'ambito

Quando un modulo è destinato ad Acrobat o Adobe Reader 8.1 ed è attivato l'ambito restrittivo, le variabili JavaScript dichiarate sono rilasciate dopo ogni esecuzione degli script. Quando un modulo è destinato ad Acrobat o Adobe Reader 9.0 e versioni successive, l'ambito restrittivo non rilascia tutte le variabili JavaScript dichiarate. Fa eccezione il caso di riunione o importazione di nuovi dati.

I miglioramenti nelle prestazioni garantiti dalle regole di ambito restrittive si applicano ai moduli destinati ad Acrobat o Adobe Reader 8.1 e versioni successive. Non applicare le regole di ambito restrittive ai moduli destinati alle versioni Acrobat o Adobe Reader precedenti alla 8. In caso contrario, gli script presenteranno un funzionamento anomalo o non saranno in grado di funzionare.

Attivazione dell'ambito restrittivo

  1. Selezionare File > Proprietà modulo e fare clic sulla scheda Valori predefiniti.

  2. Selezionare Applica regole di ambito restrittive in JavaScript, quindi fare clic su OK.