XFA Live Child Collections
JavaScriptové i FormCalc události mohou prohlížet aktuální potomní uzly form či property uzlu přes jeho read-only vlastnost nodes
const field = xfa.resolveNode("row[1].amount");
const children = field.font.nodes;
const snapshot = children.clone();
field.font.fill.color.value = "192,48,96";
const fill = children.item(0);
Čtení aktuálních potomků
| Člen | Chování |
|---|---|
length | Aktuální počet potomních uzlů |
item(index) | Aktuální potomek na tom zero-based indexu, či null pro záporný, neceločíselný či mimo rozsah ležící index |
namedItem(name) | První aktuální potomek s tím literálním názvem, či null, když se žádný netrefí |
nodes[index] | Stejný aktuální uzel jako item(index) |
for...of | Čte potomní uzly v jejich aktuálním pořadí |
clone() | Vytvoří nezávislý query seznam referencující aktuální potomky |
Kolekce rozřeší svého vlastníka přes aktuální grafový stav události při každém čtení, tedy i kolekce držená skriptovým objektem napříč událostmi
Stávající kolekce odrážejí přidávání i odebírání opakovaných instancí i implicitní tvorbu vlastností; samostatné opakované instance si drží samostatné property potomky i hodnoty
Držená kolekce, jejíž vlastník byl odebrán, hodí chybu, místo aby mířila na přeživší či náhradní instanci
Přístup z FormCalc
FormCalc rozpozná nodes jako vlastnost potomní kolekce na form, property i Data DOM uzlech
if (xfa.record.nodes.length >= 2) then
xfa.record.nodes.item(1).nodes.namedItem("amount").rawValue = "Updated"
endif
Přímé řetězy členů length, item(index), namedItem(name) a clone() použijí tytéž aktuální nativní uzly i limity kolekcí jako JavaScript
Potomní kolekce form, property i Data DOM podporují přímá čtení nodes[index] jak v JavaScriptu, tak ve FormCalc
Indexy kolekcí jsou zero-based; for...of zůstává JavaScript syntaxí
Zápisy přes referenci FormCalc kolekce aktualizují skutečnou navázanou datovou hodnotu a zachovávají izolaci opakovaných instancí; zapsané hodnoty přežijí uložení XDP, runtime reload i nativní generování PDF appearance
Číselné indexy Data DOM
const rows = xfa.record.nodes;
rows[1].nodes[0].rawValue = "Updated";
Kanonické nezáporné celočíselné klíče jako "0" a "1" rozřeší aktuálního potomka Data DOM a mimo kolekci vrátí null; nekanonické klíče jako "01", "-0" a "1.0" nealiasují číselné položky
JavaScriptová kontrola index in nodes ověří aktuální počet potomků a přímé přiřazení, smazání či předefinování kanonické číselné položky hodí TypeError
Táž omezení číselných položek platí uvnitř funkce skriptového objektu, která kolekci drží v lexickém stavu, i když jiná událost čte kolekci vrácenou tou funkcí
K přeřazení či odebrání potomků použijte stávající strukturální metody Data DOM; kolekce držená skriptovým objektem si po každé zapsané editaci i po rollbacku přečte aktuální grafový stav události
Nezávislé kopie
Zklonovaný potomní seznam používá nezávislé úložiště popsané v XFA Query Node Collections; jeho metody append, insert a remove mění to nezávislé úložiště
Zápis do uzlu referencovaného kterýmkoli seznamem mění skutečný nativní uzel a zapsané hodnoty i property override přežijí uložené XDP i nativní generování PDF appearance
Potomní kolekce Data DOM taky poskytují clone() s nezávislým úložištěm položek; jejich stávající strukturální metody append, insert a remove dál mutují nativní datový strom
Transakce a limity
Živé kolekční objekty i nezávislé kopie sdílejí alokační limity kolekcí události, kontroly operací i transakční deadline
Nezachycená chyba události či selhání rozpočtu obnoví nativní hodnoty, opakované instance, držený skriptový stav, nezávislé úložiště seznamů i stav journalu společně
Živé kolekce formulářů i vlastností jsou read-only; přímé přiřazení, smazání, předefinování vlastnosti, změny prototypu i znemožnění rozšíření hodí chybu
Kolekce Data DOM odmítnou zápisy, mazání i předefinování kanonických číselných položek, při zachování stávajících pojmenovaných strukturálních metod i běžného chování nenumerických vlastností
Pokrytí
Toto rozhraní vystavuje aktuální potomní kolekce formulářů a vlastností i nezávislé kopie potomních seznamů
Obecná tvorba šablonových/form uzlů, rekurzivní klonování uzlů, vkládání a odebírání potomních stromů i další bindingy uzlových tříd zůstávají samostatnou prací