Valores e referências FormCalc
A execução geral FormCalc com EnableJavaScript implementa referências explícitas de objetos através de Ref(value), enquanto declarações ordinárias de variáveis e argumentos ordinários de funções copiam valores de objetos
Parâmetros e resultado de Ref
Um acessor a um objeto existente de formulários torna-se um handle de objetos; passar um handle existente preserva a identidade dele, um argumento null produz um handle null, e outros argumentos escalares devolvem o valor escalar deles
Referências fornecem propriedades e métodos ordinários de nós como rawValue, parent, name, resolveNode e resolveNodes
Argumentos incorporados escalares desreferenciam handles, funções agregadas consomem valores referenciados, e handles null mantêm a semântica nula de aritmética e de strings; Exists devolve 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 em target através de dois handles referindo o mesmo objeto
Atribuição e desvinculaçã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()) | Desvincula p e dá à variável um valor null |
p = 5 após desvinculação | Define a própria variável como 5 |
Redeclarações de variáveis e argumentos de funções de utilizadores aplicam as mesmas regras de cópias ou de referências; funções podem receber, devolver e qualificar referências explícitas
Igualdade e identidade
Igualdade e desigualdade comparam identidade estável de objetos quando ambos os operandos são referências; operandos ordinários de objetos comparam os valores deles, e o resultado é 1 ou 0 numérico
Dois campos contendo o mesmo texto comparam-se iguais por valor, mas Ref(first) eq Ref(second) devolve 0 quando são campos diferentes
Instâncias repetidas e handles retidos
Um objeto de script pode reter um handle explícito através de eventos; o handle resolve o nó atual de formulários por identidade estável, pelo que reordenar um subform repetido preserva a ocorrência selecionada
Usar um handle depois de a ocorrência dele ser removida levanta um erro; transações do runtime restauram a contagem de ocorrências, valores de campos e estado de objetos de scripts quando esse erro aborta o evento
O runtime fornece automaticamente identidades estáveis de templates e de dados; quem chama diretamente a eventos omitindo TXFAEventBinding.Identity recebe uma identidade única de índices de bindings e deve fornecer identidades explícitas estáveis quando a ordem de bindings muda
Migração
Execução geral anterior retinha objetos ordinários de nós em declarações de variáveis; substitua var p=target por var p=Ref(target) quando p tem de permanecer um handle de nós
Resultados gerais de igualdade FormCalc 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