Живые коллекции потомков XFA

События JavaScript и FormCalc могут осматривать текущие узлы-потомки узла формы или узла свойства через его доступное только для чтения свойство 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);

Чтение текущих потомков

ЧленПоведение
lengthТекущее число узлов-потомков
item(index)Текущий потомок по этому индексу с нуля, или null для отрицательного, нецелого или вне диапазона индекса
namedItem(name)Первый текущий потомок с этим литеральным именем, или null, когда ни один потомок не совпадает
nodes[index]Тот же текущий узел, что и item(index)
for...ofЧитает узлы-потомки в их текущем порядке
clone()Создаёт независимый список запросов, ссылающийся на текущих потомков

Коллекция разрешает своего владельца через текущий граф событий при каждом чтении, включая коллекцию, удерживаемую script-объектом между событиями

Существующие коллекции отражают добавления и удаления повторяющихся экземпляров и неявное создание свойств; отдельные повторяющиеся экземпляры хранят отдельные дочерние свойства и значения

Удерживаемая коллекция, чей владелец был удалён, возбуждает ошибку вместо указания на выживший или замещающий экземпляр

Доступ из FormCalc

FormCalc распознаёт nodes как свойство коллекции потомков на узлах форм, свойств и Data DOM

if (xfa.record.nodes.length >= 2) then
  xfa.record.nodes.item(1).nodes.namedItem("amount").rawValue = "Updated"
endif

Прямые цепочки членов length, item(index), namedItem(name) и clone() используют те же текущие нативные узлы и пределы коллекций, что и JavaScript

Коллекции потомков форм, свойств и Data DOM поддерживают прямые чтения nodes[index] и в JavaScript, и в FormCalc

Индексы коллекций отсчитываются от нуля; for...of остаётся синтаксисом JavaScript

Записи через ссылку коллекции FormCalc обновляют фактическое связанное значение данных и сохраняют изоляцию повторяющихся экземпляров; зафиксированные значения переживают сохранение XDP, перезагрузку runtime и нативную генерацию внешних видов PDF

Числовые индексы Data DOM

const rows = xfa.record.nodes;
rows[1].nodes[0].rawValue = "Updated";

Канонические неотрицательные целые ключи вроде "0" и "1" разрешают текущего потомка Data DOM и возвращают null вне коллекции; неканонические ключи вроде "01", "-0" и "1.0" не являются псевдонимами числовых записей

JavaScript index in nodes проверяет текущее число потомков, а прямое присваивание, удаление или переопределение канонической числовой записи возбуждает TypeError

Те же ограничения числовых записей действуют внутри функции script-объекта, удерживающей коллекцию в лексическом состоянии, а также когда другое событие читает коллекцию, возвращённую этой функцией

Используйте существующие структурные методы Data DOM для переупорядочивания или удаления потомков; коллекция, удерживаемая script-объектом, читает текущий граф событий после каждой зафиксированной правки и после отката

Независимые клоны

Клонированный список потомков использует независимое хранилище, описанное в Коллекциях узлов запросов XFA; его методы append, insert и remove меняют это независимое хранилище

Запись узла, на который ссылается любой из списков, меняет фактический нативный узел, а зафиксированные значения и переопределения свойств переживают сохранённый XDP и нативную генерацию внешних видов PDF

Коллекции потомков Data DOM также предоставляют clone() с независимым хранилищем записей; их существующие структурные методы append, insert и remove продолжают менять нативное дерево данных

Транзакции и пределы

Живые объекты коллекций и независимые клоны разделяют пределы выделения коллекций события, проверки операций и дедлайн транзакции

Неперехваченная ошибка события или сбой бюджета восстанавливает нативные значения, повторяющиеся экземпляры, удерживаемое состояние скрипта, хранилище независимых списков и состояние журнала вместе

Живые коллекции форм и свойств доступны только для чтения; прямое присваивание, удаление, переопределение свойств, изменения прототипа и предотвращение расширений возбуждают ошибку

Коллекции Data DOM отклоняют запись, удаление и переопределение канонических числовых записей, сохраняя свои существующие именованные структурные методы и обычное поведение нечисловых свойств

Покрытие

Этот интерфейс открывает текущие коллекции потомков форм и свойств и независимые клоны списков потомков

Общее создание узлов шаблонов/форм, рекурсивное клонирование узлов, вставка и удаление деревьев потомков и дополнительные привязки классов узлов остаются отдельной работой

Транзакционная структура Data DOM XFA · Runtime виджетов XFA