Objektbaum des Formulars, Qualifizierung

Fragen und Antworten rund um das Thema JavaScript im LiveCycleDesigner
Antworten
schnacki
Beiträge: 55
Registriert: 21.07.2011, 11:24

Objektbaum des Formulars, Qualifizierung

Beitrag von schnacki » 12.07.2012, 12:49

Hallo Experten,

auf folgende Frage habe ich leider noch keine Antwort gefunden:

Im LCD-Javascript muss ja ständig auf Teilformulare, Schaltflächen, Felder und auch auf Scriptobjekte des aktuellen Formulars referenziert werden.

Beispiel für ein Scriptobjekt, alle folgenden Varianten funktionieren zum Beispiel in einer event-Routine einer Schaltfläche:

xfa.form.myForm.variables.myScripts.script77();

form.myForm.variables.myScripts.script77();
myForm.variables.myScripts.script77();
variables.myScripts.script77();
myScripts.script77();

Nur das geht nicht:

script77();

Anderes Beispiel:

TuWas(Textfeld77.presence);

Das geht manchmal, wenn die Eventroutine sich "in der Nähe" von Textfeld77 befindet. Machmal ist jedoch die vollständige Qualifizierung nötig:

TuWas(xfa.form.myForm.myPage.mySubform.Textfeld77.presence);

Das wird z.B. nötig, wenn ich eine Routine als "Subroutine" aus einem Scriptobjekt aufrufe.

Natürlich will man immer so wenig wie möglich qualifizieren. Erstens um das grässliche Augenpulver zu begrenzen, zweitens um die Routinen universeller verwendbar zu machen.


Meine Frage jetzt: welche Regeln gibt es, wie genau ich qualifizieren muss, bzw. was ich alles weglassen darf? Und wenn was fehlt, an welcher Stelle des Baumes fängt er dann an zu suchen, und in welche Richtung?

Vielen Dank für Tipps

Raimund Gryszik, Berlin


schnacki
Beiträge: 55
Registriert: 21.07.2011, 11:24

Objektbaum des Formulars, Qualifizierung

Beitrag von schnacki » 12.07.2012, 14:00

Hi,

ich habe jetzt selber schon einen wichtigen Hinweis in der Online-Hilfe gefunden:

Wenn sich zwei Objekte in demselben Container befinden, z. B. in einem Teilformular, haben sie denselben Kontext. Wenn Objekte in demselben Kontext vorkommen, können Sie eine abgekürzte Referenz-Syntax verwenden, die sich nur aus dem Namen des Objekts gefolgt von der Eigenschaft oder Methode, auf die Sie zugreifen möchten, zusammensetzt. Beim obigen Beispiel würde die folgende abgekürzte Referenz-Syntax auf den Wert des Feldes txtCondition in allen Feldern des Teilformulars total zugreifen:


 txtCondition.rawValue


Wenn sich zwei Objekte in unterschiedlichen Containern befinden, haben sie nicht denselben Kontext. In diesem Fall können Sie zwar ein abgekürzte Referenz-Syntax verwenden, aber die Syntax muss mit dem Namen des obersten Container-Objekts beginnen, welches die beiden Objekte nicht gemein haben. Bei der obigen Hierarchie würde die folgende abgekürzte Referenz-Syntax auf den Wert des Feldes address vom Feld txtCondition aus zugreifen:


 header.address.rawValue


Antworten