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çãoComportamento
p = Ref(other)Revincula p ao outro objeto
p = 5 quando p é uma referênciaEscreve 5 no objeto referenciado e preserva o handle
p = Null() quando p é uma referênciaLimpa 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çãoDefine 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