Valores e referências do FormCalc
A execução geral do FormCalc com EnableJavaScript implementa referências explícitas de objetos através de Ref(value), enquanto declarações comuns de variáveis e arguments comuns de funções copiam valores de objetos
Parameters e resultado de Ref
Um accessor a um objeto de formulário existente vira um handle de objeto; passar um handle existente preserva sua identidade, um argument null produz um handle null, e outros arguments escalares retornam seu valor escalar
Referências fornecem propriedades e métodos comuns de nós como rawValue, parent, name, resolveNode e resolveNodes
Arguments escalares built-in desreferenciam handles, funções agregadas consomem valores referenciados, e handles null retêm a semântica de aritmética e strings de null; Exists retorna 0 para um handle null
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
O primeiro bloco preserva o valor anterior de target em copied; o segundo bloco escreve target através de dois handles referindo-se ao mesmo objeto
Atribuição e desanexação
| Atribuição | Comportamento |
|---|---|
p = Ref(other) | Revincula p ao outro objeto |
p = 5 quando p é uma referência | Escreve 5 no objeto referenciado e preserva o handle |
p = Null() quando p é uma referência | Limpa o valor do objeto referenciado e preserva o handle |
p = Ref(Null()) | Desanexa p e dá à variável um valor null |
p = 5 após a desanexação | Define a própria variável como 5 |
Redeclarações de variáveis e arguments de funções de usuário aplicam as mesmas regras de cópia ou referência; funções podem receber, retornar e qualificar referências explícitas
Igualdade e identidade
Igualdade e desigualdade comparam identidade estável de objetos quando ambos os operands são referências; operands comuns de objetos comparam seus valores, e o resultado é 1 ou 0 numérico
Dois campos contendo o mesmo texto são iguais por valor, mas Ref(first) eq Ref(second) retorna 0 quando são campos diferentes
Instâncias repetidas e handles retidos
Um objeto de script pode reter um handle explícito entre eventos; o handle resolve o nó atual do formulário por identidade estável, então reordenar um subform repetido preserva a ocorrência selecionada
Usar um handle depois que sua ocorrência foi removida dispara um erro; transações de runtime restauram a contagem de ocorrências, valores de campos e estado de objetos de script quando esse erro aborta o evento
O runtime fornece identidades estáveis de template e dados automaticamente; chamadores diretos de eventos que omitem TXFAEventBinding.Identity recebem uma identidade única de índice de binding e devem fornecer identidades estáveis explícitas quando a ordem de bindings muda
Migração
Execuções gerais anteriores retinham objetos de nós comuns em declarações de variáveis; substitua var p=target por var p=Ref(target) quando p precisa permanecer um handle de nó
Os resultados de igualdade do FormCalc geral agora usam 1 e 0 em vez de texto booleano JavaScript; código que concatenava resultados de igualdade deve esperar a representação numérica
APIs relacionadas
Eval dinâmico, HPDFXFACompileFormCalcEvent, TXFAEventBinding e Runtime XFA interativo