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
| Zuweisung | Verhalten |
|---|---|
p = Ref(other) | Bindet p neu an das andere Objekt |
p = 5, wenn p eine Referenz ist | Schreibt 5 ins referenzierte Objekt und bewahrt das Handle |
p = Null(), wenn p eine Referenz ist | Leert 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ösung | Setzt 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