Rendering-Vorlagen

TemplateExpressions 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>