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ů

ČlenChování
lengthAktuá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í

Transakční struktura XFA Data DOM · XFA widget runtime