FormCalc 값과 참조

EnableJavaScript가 켜진 일반 FormCalc 실행은 Ref(value)로 명시적 객체 참조를 구현하고, 평범한 변수 선언과 평범한 함수 인자는 객체 값을 복사합니다

Ref 매개변수와 결과

기존 폼 객체에 대한 접근자는 객체 핸들이 됩니다. 기존 핸들을 넘기면 식별자가 유지되고, null 인자는 null 핸들을 만들며, 그 밖의 스칼라 인자는 스칼라 값을 반환합니다

참조는 rawValue, parent, name, resolveNode, resolveNodes 같은 평범한 노드 프로퍼티와 메서드를 제공합니다

스칼라 내장 함수 인자는 핸들을 역참조하고, 집계 함수는 참조된 값을 소비하며, null 핸들은 null 산술·문자열 의미론을 유지합니다. Exists는 null 핸들에 0을 반환합니다

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가 참조일 때 p = 5참조된 객체에 5를 쓰고 핸들을 유지합니다
p가 참조일 때 p = Null()참조된 객체 값을 비우고 핸들을 유지합니다
p = Ref(Null())p를 분리하고 변수에 null 값을 줍니다
분리 뒤 p = 5변수 자체를 5로 둡니다

변수 재선언과 사용자 함수 인자에도 같은 복사·참조 규칙이 적용됩니다. 함수는 명시적 참조를 받고, 반환하고, 한정할 수 있습니다

동등성과 식별자

양쪽 피연산자가 참조면 동등·부등 비교는 안정적인 객체 식별자를 비교합니다. 평범한 객체 피연산자는 값을 비교하고 결과는 숫자 1이나 0입니다

같은 텍스트를 담은 두 field는 값 기준으로 동등하지만, 서로 다른 field면 Ref(first) eq Ref(second)는 0을 반환합니다

반복 인스턴스와 유지되는 핸들

스크립트 객체는 명시적 핸들을 이벤트에 걸쳐 붙잡을 수 있습니다. 핸들은 안정적인 식별자로 현재 폼 노드를 해석하므로, 반복 subform을 재배치해도 선택된 occurrence가 유지됩니다

occurrence가 제거된 뒤 핸들을 쓰면 오류가 납니다. 그 오류가 이벤트를 중단하면 런타임 트랜잭션이 occurrence 수, field 값, 스크립트 객체 상태를 복원합니다

런타임은 안정적인 템플릿·데이터 식별자를 자동으로 공급합니다. TXFAEventBinding.Identity를 생략한 직접 이벤트 호출자는 고유한 바인딩 인덱스 식별자를 받으므로, 바인딩 순서가 바뀔 수 있다면 명시적 안정 식별자를 공급해야 합니다

마이그레이션

이전 일반 실행은 변수 선언에 평범한 노드 객체를 유지했습니다. p가 노드 핸들로 남아야 한다면 var p=target을 var p=Ref(target)으로 바꾸세요

일반 FormCalc 동등성 결과는 이제 JavaScript boolean 텍스트 대신 1과 0을 씁니다. 동등성 결과를 이어 붙이던 코드는 숫자 표현을 예상해야 합니다

관련 API

동적 Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding, 인터랙티브 XFA 런타임