Значения и ссылки 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