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 referenceZapíše 5 do referencovaného objektu a ponechá handle
p = Null(), když p je referenceVymaž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