FormCalc Values and References
Obecné provedení FormCalc s EnableJavaScript implementuje explicitní objektové reference přes Ref(value), zatímco běžné deklarace proměnných i běžné argumenty funkcí kopírují hodnoty objektů
Parametry a výsledek Ref
Accessor na existující form objekt se stane objektovým handle; předání existujícího handle zachová jeho identitu, null argument vytvoří null handle a ostatní skalární argumenty vrátí svou skalární hodnotu
Reference dodávají běžné vlastnosti a metody uzlů jako rawValue, parent, name, resolveNode a resolveNodes
Skalární vestavěné argumenty dereferencují handly, agregátní funkce konzumují referencované hodnoty a null handly si uchovávají aritmetickou i řetězcovou sémantiku null; Exists vrací 0 pro null handle
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
První blok zachová v copied předchozí hodnotu targetu; druhý blok zapisuje target přes dvě handla odkazující na tentýž objekt
Přiřazení a odpojení
| Přiřazení | Chování |
|---|---|
p = Ref(other) | Znovu naváže p na jiný objekt |
p = 5, když p je reference | Zapíše 5 do referencovaného objektu a ponechá handle |
p = Null(), když p je reference | Vymaže hodnotu referencovaného objektu a ponechá handle |
p = Ref(Null()) | Odpojí p a dá proměnné hodnotu null |
p = 5 po odpojení | Nastaví samotnou proměnnou na 5 |
Znovu deklarace proměnných i argumenty uživatelských funkcí aplikují tatáž pravidla kopie či reference; funkce mohou explicitní reference přijímat, vracet i kvalifikovat
Rovnost a identita
Rovnost i nerovnost porovnávají stabilní identitu objektů, když jsou oba operandy reference; běžné objektové operandy porovnávají své hodnoty a výsledek je číselné 1 či 0
Dvě pole se stejným textem se podle hodnoty rovnají, ale Ref(first) eq Ref(second) vrátí 0, když jde o různá pole
Opakované výskyty a držené handly
Skriptový objekt může držet explicitní handle napříč událostmi; handle rozřeší aktuální form uzel podle stabilní identity, takže přeřazení opakovaného subformu zachová vybraný výskyt
Použití handla po odebrání jeho výskytu hodí chybu; runtime transakce obnoví počet výskytů, hodnoty polí i stav skriptových objektů, když ta chyba přeruší událost
Runtime dodává stabilní šablonové i datové identity automaticky; přímí volající událostí, kteří vynechají TXFAEventBinding.Identity, dostanou unikátní identitu binding indexu a při měnícím se pořadí bindingů by měli dodávat explicitní stabilní identity
Migrace
Dřívější obecné provedení drželo běžné objekty uzlů v deklaracích proměnných; nahraďte var p=target za var p=Ref(target), když má p zůstat node handlem
Výsledky rovnosti obecného FormCalc teď používají 1 a 0 místo Booleovského textu JavaScriptu; kód, který zřetězoval výsledky rovnosti, musí počítat s číselnou reprezentací
Související API
Dynamický Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding a Interactive XFA Runtime