FormCalc-Werte und Referenzen

Die allgemeine FormCalc-Ausführung mit EnableJavaScript implementiert explizite Objektreferenzen über Ref(value), während gewöhnliche Variablendeklarationen und gewöhnliche Funktionsargumente Objektwerte kopieren

Ref-Parameter und Ergebnis

Ein Accessor auf ein bestehendes Formularobjekt wird ein Objekt-Handle; das Übergeben eines bestehenden Handles bewahrt seine Identität, ein null-Argument erzeugt ein null-Handle, und andere skalare Argumente liefern ihren skalaren Wert

Referenzen bieten gewöhnliche Knoten-Properties und -Methoden wie rawValue, parent, name, resolveNode und resolveNodes

Skalare Built-in-Argumente dereferenzieren Handles, Aggregatfunktionen konsumieren referenzierte Werte, und null-Handles behalten null-Arithmetik- und String-Semantik; Exists liefert 0 für ein null-Handle

var copied = target
target = 8
other = copied

var p = Ref(target)
p = 9
var q = p
q = 10

Der erste Block bewahrt den vorherigen Wert von target in copied; der zweite Block schreibt target über zwei Handles, die dasselbe Objekt referenzieren

Zuweisung und Ablösung

ZuweisungVerhalten
p = Ref(other)Bindet p neu an das andere Objekt
p = 5, wenn p eine Referenz istSchreibt 5 ins referenzierte Objekt und bewahrt das Handle
p = Null(), wenn p eine Referenz istLeert den referenzierten Objektwert und bewahrt das Handle
p = Ref(Null())Löst p ab und gibt der Variable einen null-Wert
p = 5 nach der AblösungSetzt die Variable selbst auf 5

Variablen-Redefinitionen und Benutzerfunktionsargumente wenden dieselben Kopier- oder Referenzregeln an; Funktionen können explizite Referenzen empfangen, zurückliefern und qualifizieren

Gleichheit und Identität

Gleichheit und Ungleichheit vergleichen stabile Objektidentität, wenn beide Operanden Referenzen sind; gewöhnliche Objektoperanden vergleichen ihre Werte, und das Ergebnis ist numerisch 1 oder 0

Zwei Felder mit demselben Text vergleichen als wertgleich, aber Ref(first) eq Ref(second) liefert 0, wenn es unterschiedliche Felder sind

Wiederholte Instanzen und erhaltene Handles

Ein Skriptobjekt kann ein explizites Handle über Ereignisse hinweg behalten; das Handle löst den aktuellen Formularknoten über stabile Identität auf, sodass das Umordnen eines wiederholten Subformulars das ausgewählte Vorkommen bewahrt

Die Verwendung eines Handles nach dem Entfernen seines Vorkommens wirft einen Fehler; Runtime-Transaktionen stellen Vorkommenszahl, Feldwerte und Skriptobjekt-Zustand wieder her, wenn dieser Fehler das Ereignis abbricht

Die Runtime liefert stabile Template- und Datenidentitäten automatisch; direkte Ereignis-Aufrufer, die TXFAEventBinding.Identity weglassen, erhalten eine eindeutige Binding-Index-Identität und sollten explizite stabile Identitäten liefern, wenn sich die Binding-Reihenfolge ändert

Migration

Die frühere allgemeine Ausführung hielt gewöhnliche Knotenobjekte in Variablendeklarationen; ersetze var p=target durch var p=Ref(target), wenn p ein Knoten-Handle bleiben muss

Allgemeine FormCalc-Gleichheitsergebnisse nutzen jetzt 1 und 0 statt JavaScript-Boolean-Text; Code, der Gleichheitsergebnisse konkatenierte, sollte die numerische Darstellung erwarten

Verwandte APIs

Dynamisches Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding und Interaktive XFA-Runtime