RFC - Feldhintergrund nach Einfärbung wieder transparent schalten

Fragen und Antworten rund um das Thema JavaScript im LiveCycleDesigner
Antworten
Benutzeravatar
supersonic
Beiträge: 2
Registriert: 02.03.2012, 15:20

RFC - Feldhintergrund nach Einfärbung wieder transparent schalten

Beitrag von supersonic » 16.03.2015, 18:47

Liebe Acronauten,

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"
färbt ein Feld z.B. in sattem Gilb.

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"
färbt das Feld zwar kreideweiß, gibt jedoch nicht mehr den Durchblick auf den Hintergrund frei.

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>
Nach der ersten Zuweisung:

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>
Der Versuch, dem fill-Objekt oder einem Unterknoten einfach das Null-Objekt zuzuweisen, ruft General Error auf den Plan.

Lösung:

Nein - um den alten Zustand wieder herzustellen, müssen wir den Unterknoten <fill> ganz loswerden. Hierfür gibt es erfreulicherweise die
remove()
-Methode, die auf die Menge nodes der Unterknoten angewandt werden muss.

So kann der Befehl z.B. aussehen:

Code: Alles auswählen

this.border.nodes.remove(this.border.fill);
Damit die Änderung sofort wirksam wird, schieben wir noch schnell ein relayout() hinterher:

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"));
Für den Anhang habe ich noch schnell das Beispiel-PDF gezimmert.

Geht das noch besser? Ich freue mich auf Anmerkungen. :)

Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Re: RFC - Feldhintergrund nach Einfärbung wieder transparent schalten

Beitrag von nele_sonntag » 18.01.2023, 22:43

Eben sehe ich Deinen Beitrag!!!
Ein Dankeschön ist damals völlig untergegangen - sorry dafür!!
Falls Dich der Beitrag von mir noch erreicht, danke und liebe Grüße,
Mandy

Antworten