Rendering-Vorlagen
TemplateExpression
s definieren das Rendering für Modellobjekte. Die Vorlagensyntax ist wie folgt definiert:
Literaler Text
Der gesamte Text wird als literaler (internationalisierter) Text interpretiert, mit Ausnahme von eingebetteten Vorlagenausdrücken, siehe Schlag.
Schablonenausdruck
Ein Schablonenausdruck ist von geschweiften Klammern umgeben { [expr] }
.
Literales XML/HTML
XML/HTML-Strukturen können mit eingebetteten Ausdrücken in Attributwerten und Tag-Inhalten wörtlich ausgegeben werden: <div class="myclass {$other}">Some {$value}.</div>
.
Template-Referenz
In einem Template-Ausdruck kann ein anderes Template über seinen Namen referenziert werden {-> [other-template]}
. In der Ausgabe wird eine Template-Referenz durch die Erweiterung des referenzierten Templates auf Basis der gleichen Konfigurationsinstanz ersetzt.
Bedingte Auswertung
Ein Template-Ausdruck kann aus einem bedingten Bewertungsoperator { [test] ? [if] : [else] }
bestehen. Bei der Auswertung wird der bedingte Ausdruck zur Expansion des [if]
Ausdrucks ausgewertet, wenn der Ausdruck [test]
zu einem Nicht-null
, Nicht-Null- oder Nicht-Leer-Wert ausgewertet wird. Andernfalls wird der Ausdruck [else]
ausgewertet.
Alternative Auswertung
Um eine alternative Darstellung für einen ansonsten leeren Wert zu erzeugen, ist eine Kurzform für { [alternative1] ? [alternative1] : [alternative2] }
durch einen alternativen Ausdruck { [alternative1] | [alternative2] }
möglich.
Eingebetteter Vorlagentext
Innerhalb eines Schablonenausdrucks kann der Parsermodus wieder auf literalen Text (mit eventuell eingebetteten Schablonenausdrücken) umgeschaltet werden, indem der literalen Text wieder mit geschweiften Klammern umgeben wird { [test] ? {some literal text} : {some other literal text} }
Eigenschaftszugriff
Der Zugriff auf den Wert einer Modelleigenschaft des zugrunde liegenden Modellobjekts erfolgt über den Eigenschaftsnamen {my-property}
.
Der Zugriff auf eine Eigenschaft, die nicht durch das zugrunde liegende Modell definiert ist, führt zu einem Fehler.
Standardmäßig kann auf Eigenschaften von ConfigurationItem
Modellen über deren Eigenschaftsnamen zugegriffen werden. Bei Verwendung eines com.top_logic.layout.template.TLModelAccess
zur Auswertung kann auch auf persistente Objekte (com.top_logic.model.TLObject
) und beliebige Objekte, die die Schnittstelle com.top_logic.layout.template.WithProperties
implementieren, zugegriffen werden.
Variablenzugriff
Im eigentlichen Auswertungskontext kann ein Satz von Variablen definiert sein (als Schlüssel-Wert-Mapping). Auf eine solche Variable kann über ihren Namen zugegriffen werden, indem ein $
Zeichen vorangestellt wird. Auf eine Variable mit dem Namen my-var
kann mit $my-var
zugegriffen werden.
Funktionsaufruf
Global definierte Funktionen können von Template-Ausdrücken aus aufgerufen werden. Eine Funktion wird durch ein #
-Präfix vor ihrem Namen referenziert. Die Funktion sublist
wird z. B. durch den Ausdruck #sublist($l, 2)
aufgerufen, wobei das erste Argument einen Listenwert referenzieren soll und das zweite den Startoffset als Integer-Wert angibt. Für alle definierten Funktionen siehe die Konfiguration von GlobalConfig#getFunctions()
.
Iteration
Wenn ein zugegriffener Wert listenwertig ist, können alle Werte z. B. mit {foreach(x : $my-var, '; ', {"{$x}"})}
iteriert werden. Dadurch wird jeder Wert des Listenwerts $my-var
an die lokal definierte Variable $x
gebunden und die Schablone "{$x}"
für jedes Listenelement ausgewertet (effektiv wird jedes von Anführungszeichen umgebene Element ausgegeben). Zwischen zwei Auswertungen wird der Trennausdruck '; '
zu einem Semikolon gefolgt von einem Leerzeichen expandiert. Wenn der Wert von $my-var
die Liste der Zahlen 1, 2, 3
ist, wäre das endgültige Auswertungsergebnis "1"; "2"; "3"
.
Indizierter Zugriff
Wenn ein zugegriffener Wert listenwertig ist, kann mit $my-var[42]
auf ein Element an einem bestimmten Index zugegriffen werden.
Der Zugriff auf einen Index außerhalb des Bereichs ergibt einen null
Wert. Dies ermöglicht z. B. das Testen, ob eine Sammlung eine bestimmte Anzahl von Einträgen enthält durch {list[1] ? ...}
.
Der Zugriff mit einem negativen Index hat die Semantik eines Zugriffs mit einem Index relativ zum Ende der Liste. Bei einer Liste mit der Größe 5
wird der Ausdruck {list[-2]}
auf das Element bei Index 3
ausgewertet.
Map-Zugriff
Wenn ein zugegriffener Wert map-bewertet mit String-Schlüsseln ist, kann mit $my-var['some-key']
auf ein Element mit irgendeinem Schlüssel zugegriffen werden.
Referenzzugriff
Wenn ein zugegriffener Wert selbst ein Konfigurationswert ist, kann auf eine bestimmte Eigenschaft mit einem durch Punkte getrennten Pfadausdruck {$my-var.some-property}
zugegriffen werden.
Literaler String
Eine literale Zeichenkette (ohne die Möglichkeit, weitere Ausdrücke einzubetten) wird als 'some text'
oder "some text"
geschrieben.
Literale Zahlen
Ein literaler ganzzahliger Wert wird einfach als Zahl 42
geschrieben.
Zugriff auf das zugrunde liegende Modellobjekt
Das zugrunde liegende Modell als Ganzes kann mit dem Schlüsselwort this
referenziert werden.
HTML-Ausgabe
Wenn die Ausgabe über eine com.top_logic.layout.template.TemplateWriter
erzeugt wird, kann die Vorlage eingebettete HTML-Syntax enthalten. Das HTML kann eingebettete Ausdrücke innerhalb von Attribut- oder Elementinhalten enthalten:
<div class="{my-class}">{my-text}</div>