Значения и ссылки FormCalc

Общее выполнение FormCalc с EnableJavaScript реализует явные ссылки на объекты через Ref(value), тогда как обычные объявления переменных и обычные аргументы функций копируют значения объектов

Параметры и результат Ref

Accessor к существующему объекту формы становится хэндлом объекта; передача существующего хэндла сохраняет его идентичность, нулевой аргумент даёт null-хэндл, а прочие скалярные аргументы возвращают своё скалярное значение

Ссылки предоставляют обычные свойства и методы узлов, такие как rawValue, parent, name, resolveNode и resolveNodes

Скалярные встроенные аргументы разыменовывают хэндлы, агрегатные функции потребляют сосланные значения, а null-хэндлы сохраняют семантику null в арифметике и строках; Exists возвращает 0 для null-хэндла

var copied = target
target = 8
other = copied

var p = Ref(target)
p = 9
var q = p
q = 10

Первый блок сохраняет предыдущее значение target в copied; второй блок пишет target через два хэндла, ссылающихся на один объект

Присваивание и отсоединение

ПрисваиваниеПоведение
p = Ref(other)Перепривязывает p к другому объекту
p = 5, когда p — ссылкаПишет 5 в сосланный объект и сохраняет хэндл
p = Null(), когда p — ссылкаОчищает значение сосланного объекта и сохраняет хэндл
p = Ref(Null())Отсоединяет p и даёт переменной значение null
p = 5 после отсоединенияПрисваивает 5 самой переменной

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

Равенство и идентичность

Равенство и неравенство сравнивают стабильную идентичность объектов, когда оба операнда — ссылки; обычные объектные операнды сравнивают свои значения, а результат — числовые 1 или 0

Два поля с одинаковым текстом сравниваются как равные по значению, но Ref(first) eq Ref(second) возвращает 0, когда это разные поля

Повторяющиеся экземпляры и удерживаемые хэндлы

Script object может удерживать явный хэндл между событиями; хэндл разрешает текущий узел формы по стабильной идентичности, поэтому переупорядочивание повторяющегося subform сохраняет выбранное вхождение

Использование хэндла после удаления его вхождения бросает ошибку; транзакции рантайма восстанавливают число вхождений, значения полей и состояние script objects, когда эта ошибка прерывает событие

Рантайм автоматически поставляет стабильные идентичности шаблона и данных; прямые вызывающие событий, опускающие TXFAEventBinding.Identity, получают уникальную идентичность по индексу привязки и должны задавать явные стабильные идентичности, когда порядок привязок меняется

Миграция

Раньше общее выполнение удерживало обычные объекты узлов в объявлениях переменных; заменяйте var p=target на var p=Ref(target), когда p должен остаться хэндлом узла

Результаты равенства общего FormCalc теперь используют 1 и 0 вместо булева текста JavaScript; код, конкатенировавший результаты равенства, должен ожидать числовое представление

Связанные API

Динамический Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding и Интерактивный XFA Runtime