WebTML-Optionen sind variabel festlegbare Werte, die in der WebTML-Programmierung wie Variablen verwendet werden können. Anders als WebTML-Variablen jedoch ist ihr Gültigkeitsbereich an die Hierarchie der WebTML-Tags gebunden.
Normalerweise werden WebTML-Optionen über den Tag <tml:
option> gesetzt. Sie können über denselben Tag auch wieder ausgelesen werden wenn er ohne Inhalt oder mit dem Attribut
mode="get" ausgeführt wird.
Die Sichtbarkeit einer WebTML-Option ist, grob beschrieben, im
Code "nach und unter" seiner Definition gegeben. Technisch wird die
Option als Eigenschaft des übergeordneten Tags von <tml:option>
gesetzt, und stehen wie folgt zur Verfügung:
a) Allen
Funktionalitäten die sich im Inhalt dieses übergeordneten Tags befinden
und zum Zeitpunkt der Options-Setzung noch nicht ausgeführt wurden.
b) Eventuellen Funktionalitäten des übergeordneten Tags die erst beim End-Tag einsetzen
c) Über a) oder b) eingebundenen WebTML-Modulen
Dies mag zunächst kompliziert erscheinen, ist jedoch in den meisten Fällen pragmatisch richtig. Ein Beispiel:
<tml:range>
<tml:item name="x"/>
<tml:option name="theoption">thevalue</tml:option>
<tml:item name="y"/>
<tml:range>
<tml:include ref="mymodule"/>
</tml:range>
</tml:range>
<tml:item name="z"/>
In
diesem Beispiel sind die Tags hervorgehoben, welche theoretisch die
Möglichkeit haben auf die gesetzte Option "theoption" zuzugreifen. Dazu
gehörten folgende Tags derselben Tag-Ebene (item und range),
untergeordnete Tags dieser Tags (include) sowie die Tags weiterer dort
eingebundener WebTML-Module (Das Modul "mymodule" und sein
WebTML-Code).
Es ist auch der Endtag von <tml:range>
hervorgehoben, weil durch Sichtbarkeitsregel b) selbst abschliessende
Funktionalitäten des übergeordneten Tags von <tml:option> die
Möglichkeit haben auf die Option zu reagieren.
Aufgrund dieser Sichtbarkeitsregel sind WebTML-Optionen besonders geeignet, per <tml:include>
eingebundenen WebTML-Modulen gezielt Parameter mitzugeben,
welche dann in deren Code ausgewertet werden. Der Include-Tag führt die
Einbindung erst aus wenn sein End-Tag ausgewertet wird. Daher sind
Optionen die in seinem Inhalt definiert wurden zu diesem Zeitpunkt
bereits verfügbar.
<tml:include ref="mymodule">
<tml:option name="color">red</tml:option>
</tml:include>
Über
das Attribut
scope kann die
Sichtbarkeit einer WebTML-Option zusätzlich parametrisiert werden.
Normalerweise setzt sich die Sichtbarkeit einer WebTML-Option "nach
unten" unbegrenzt weiter fort durch eingebundene WebTML-Module und
wiederum deren eingebundene Module. Dies entspricht dem Scope "global",
der auch die Standardeinstellung ist.
Wird manuell ein Scope
"local" bestimmt, so ändert sich dies insofern, dass die Option nur
noch für ein WebTML-Modul Gültigkeit hat und zwar:
a) Entweder das aktuelle WebTML-Modul
b) Oder das WebTML-Modul welches durch ein unmittelbar übergeordnetes <tml:include> eingebunden wird
Hiermit
kann verhindert werden, dass die Option tiefer in der Hierarchie
eingebundene WebTML-Module beeinflusst.
Ein
Attribut des <tml:include>-Tags
keepoptions kann verwendet werden,
wenn bewusst eigentlich lokale Optionen, die nicht für ein
eingebundenes Modul gelten würden, mittransportiert werden sollten.
Eine andere Eigenschaft von WebTML-Optionen ist, dass sie "wiederhergestellt" werden wenn ein WebTML-Portlet per AJAX neu geladen wird.
Dies unterscheidet sie von WebTML-Variablen. Wird ein WebTML-Portlet von einer Variable beeinflusst die außerhalb des Portlets definiert wurde, so ist diese Variable nicht mehr vorhanden wenn das Portlet per AJAX neu geladen wird.
Anders bei WebTML-Optionen. Der Stand an verfügbaren Optionen wird zu Beginn eines WebTML-Portlets "konserviert". Dieser Stand wird wiederherstellt wenn das Portlet separat per AJAX wieder geladen wird. Was WebTML-Optionen angeht ist die Ablaufumgebung von WebTML-Portlets also über AJAX-Requests hinweg konstant.
Setzt man AJAX-Portlets ein so kann man mit der gezielten Verwendung von Optionen mit "local" Scope Netzwerktraffic einsparen. Um WebTML-Optionen bei einem Neuladen des Portlets per AJAX wieder zur Verfügung zu haben müssen ihre Daten vom Browser wieder an den Server übermittelt werden. Dies erzeugt umso mehr Traffic, je größer und umfangreicher die zu übermittelnden Optionen sind und beeinflusst die Gesamt-Performance negativ.
Achtet man darauf, Optionen die nur im unmittelbar eingebunden Modul benutzt werden, auf Scope "local" zu setzen, so verringert sich unter Umständen die Anzahl der zu transportierenden Optionen für Portlets und somit auch der Traffic.
WebTML-Optionen werden auch benutzt um WebTML-Elemente zu parametrisieren. Dies funktioniert identisch zur Parametrisierung von Includes dadurch, dass der End-Tag von <tml:
element> erst die Element-Einbindung vornimmt und zu diesem Zeitpunkt bereits alle Optionen zur Verfügung hat die in seinem Inhalt gesetzt wurden.
<tml:element name="zip">
<tml:option name="files"> ... <tml:option>
</tml:element>
Die Optionsnamen welche ein WebTML-Element erkennt und auswertet sind zu jedem Element in der
WebTML Element-Referenz dokumentiert.