nein, das ist nicht schon wieder eine Frage a la "Ich bin Anfänger und muss bis Montag die Antragsformulare für Obamacare fertig entwickelt haben"...
Sondern einfach mal ein Dankeschön an dieses tolle Forum in Form eines kleinen Wissensbeitrags, von dem ich annehme, dass er bisher nicht zur Sprache gekommen ist.
Mit der Bitte um Kommentare!
Wir haben schon so lange und viele nützliche Hinweise aus dem Acronauten-Forum gezogen, dass es höchste Zeit ist, endlich auch mal etwas zurückfließen zu lassen. Besonders loben und preisen will ich nele_sonntag, Merklin, armine, radzmar und alle hier nicht genannten, die schon so vielen kompetente und wertvolle Hinweise gegeben haben.
Falls Interesse besteht, kann ich in loser Folge weitere "Eingebungen" hier publizieren.
Beste Grüße,
Rolf G. Schall aka supersonic
---------------
Problem:
Sicher beherrschen die meisten von Euch das dynamische Einfärben des Hintergrundes eines Feldes oder Teilformulares.
Code: Alles auswählen
...border.fill.color.value = "255, 255, 0"
Problem: Wie wird man diese Einfärbung wieder los, und zwar so, dass das Feld wieder durchscheinend wird?
Code: Alles auswählen
...border.fill.color.value = "255, 255, 255"
Es nützt nichts, color.value = "" zu setzen - das färbt den Hintergrund einfach schwarz.
Die Ursache:
Einmal zugewiesen, nistet sich das Hintergrund-Element <fill> im XFA-Modell als Unterknotens von <border> dauerhaft ein.
Vorher:
Code: Alles auswählen
<subform name="GTFO_BEISPIEL" x="60.325mm" y="60.325mm" w="88.9mm" h="66.675mm">
<border>
<edge/>
</border>
...
</subform>
Code: Alles auswählen
<subform name="GTFO_BEISPIEL" x="60.325mm" y="60.325mm" w="88.9mm" h="66.675mm">
<border>
<edge/>
<fill>
<color value="255,255,0"/>
</fill>
</border>
...
</subform>
Lösung:
Nein - um den alten Zustand wieder herzustellen, müssen wir den Unterknoten <fill> ganz loswerden. Hierfür gibt es erfreulicherweise die
-Methode, die auf die Menge nodes der Unterknoten angewandt werden muss.remove()
So kann der Befehl z.B. aussehen:
Code: Alles auswählen
this.border.nodes.remove(this.border.fill);
Code: Alles auswählen
xfa.layout.relayout()
Als Argument von remove() ist direkt die Referenz auf den fill-Knoten zu übergeben. Bei komplexeren oder mehrfachen Zugriffen bediene man sich der resolveNode-Methode. Hier nur zur Illustration:
Code: Alles auswählen
GTFO_BEISPIEL.border.nodes.remove(GTFO_BEISPIEL.border.resolveNode("fill"));
Geht das noch besser? Ich freue mich auf Anmerkungen.
