När man arbetar med JavaScript i formulär är det viktigt att deklarera objekt och variabler i det omfång de är tänkta att användas. Onödig global deklaration av variabler eller objekt kan orsaka prestandaproblem. Strikta omfångsregler infördes i Designer 8.1 för att förbättra formulärs körtid och minnesanvändning.
Vad innebär omfång i JavaScript?
Omfång fungerar direkt utåt så att allting inom klamrar ({}) kan se utanför dem. Ingenting som ligger utanför klamrar kan dock få tillgång till något innanför klamrarna.
I följande exempel öppnar den första klammern funktionsomfånget och den andra stänger det. Allting mellan klamrarna är inom omfånget för foo ().
Omfånget i följande exempel är giltigt eftersom var nFooVar = nOutsideVar innanför klamrarna kan se var nOutsideVar = 2 utanför klamrarna.
I motsats till detta visar följande exempel på ett ogiltigt omfång eftersom var nOutsideVar = nFooVar inte får tillgång till var nFooVar =4 innanför klamrarna.
Omfång i skript beskriver delar av skript som får tillgång till skriptdelar. Skriptdelarna kan vara variabler eller funktioner.
Vad är omfång i XML?
Omfång i en formulärdesign handlar om hierarki. Om du exempelvis vill komma åt ett delformulär inside i följande XML-källa så måste du skriva outside.inside.
<subform name="outside">
<subform name="inside">
…
</subform>
</subform>
Du skriver inte inside.outside eftersom du måste skaffa dig tillgång till det yttersta delformuläret först och sedan borra dig inåt.
SOM-uttryck och omfång
I formulär som är tänkta för Acrobat eller Adobe Reader 8.1 så har SOM-uttrycken rätt omfång som visas i detta exempel:
<subform name="a">
<subform name="b"/>
I formulär som har Acrobat eller Adobe Reader 8.0 som mål returnerar SOM-uttrycket a.b.a delformuläret a. I formulär som har Acrobat eller Adobe Reader 8.1 som mål returnerar SOM-uttrycket a.b.anull eftersom delformuläret b inte har något underordnat formulär med namnet a. I Acrobat eller Adobe Reader 9.0 eller senare returnerar uttrycket ett fel eftersom a inte är en giltig underordnad till b.
I Acrobat eller Adobe Reader 8.1 blir funktioner och variabler inom en nods skript inte globala (förutom skriptobjekt) som visas i följande exempel:
<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>
När du klickar på field 2 i ett formulär med målversion Acrobat eller Adobe Reader 8.0 utförs funktionen bar().
När du klickar på field 2 i ett formulär med målversion Acrobat eller Adobe Reader 8.1 utförs inte funktionen bar(). Orsaken är att funktionen bar() endast är tillgänglig från inuti det initialiserade skriptet i field1.
Omfång och skriptobjekt
Skriptobjekt har globalt omfång, därför kan vem som helst nå dem från var som helst. Om du har en metod som du vill att både field1.initialize och field2.click skall ha tillgång till placerar du den i ett skriptobjekt. Strikta omfångsregler innebär att du inte kan anropa bar() från var som helst i ett formulär. Du kan också få ett körtidsfel som visar att funktionen bar() inte kunde tolkas. Skriptmotorn letade efter bar() inom det omfång som du har tillgång till och hittade den inte.
Omfång och målversion
Om du använder strikta omfångsregler ska du komma ihåg att du får en prestandaökning i formulär som är avsedda för Acrobat eller Adobe Reader 8.1 och senare versioner. Undvik att använda strikta omfångsregler i formulär som är avsedda för äldre versioner av Acrobat eller Adobe Reader. Annars kan skripten i formuläret fungera på annat sätt. Existerande formulär skall säkerhetskopieras innan du aktiverar strikta omfångsregler och skripten skall alltid kontrolleras efteråt. Om du aktiverar strikta omfångsregler och sedan ändrar målversionen till tidigare än Acrobat eller Adobe Reader 8.1 visas varningsmeddelanden.
När omfångsregler bör användas
När ett formulär har Acrobat eller Adobe Reader 8.1 som mål och strikta omfångsregler är aktiverade, släpps deklarerade JavaScript-variabler efter körning av varje skript. När ett formulär har Acrobat eller Adobe Reader 9.0 och senare som mål släpper strikta omfångsregler inte alla JavaScript-variabler. Undantaget är när nya data importeras eller sammanfogas igen.
Prestandaförbättringarna med strikta omfångsregler gäller för formulär med målversion Acrobat eller Adobe Reader 8.1 och senare. Använd inte strikta omfångsregler för formulär som har målversioner Acrobat eller Adobe Reader tidigare än 8. Annars kan skripten uppföra sig annorlunda eller sluta fungera.
Aktivera strikta omfångsregler
Välj Arkiv > Formuläregenskaper och klicka på fliken Standardvärden.
Markera Tillämpa strikta omfångsregler i JavaScript och klicka sedan på OK.