Живые коллекции потомков 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