2010-11-29 7 views
1

Ich frage mich, hat Lift einen Iterationstag (zB for, forech)? Wenn ich mit JSP arbeitete, konnte ich einfach eine Liste iterieren, nur mit JSP, das Objekt an das Tag übergeben. Etwas wie this oder like this. Ich weiß, es ist nicht wirklich das beste Beispiel, aber Sie verstehen meine Absichten. Zusammenfassend, gibt es das mit Lift, oder wenn nicht, wie würde ich das schaffen?Hat Liftweb Iterationstags?

Das letzte, was ich tun möchte, ist Hardcode HTML.

Antwort

10

Kurz gesagt: Nein. Das Design von Lift unterscheidet streng zwischen Logik und Design und verbietet daher die Verwendung von generalisierten Tags im Template-Markup.

Werfen Sie einen Blick auf die view first article, um zu sehen, wie Aufzug Iterationen behandeln kann.

Ein Beispiel aus dem Artikel: Ihr Markup:

<table> 
    <lift:show.users> 
    <tr> 
     <td><f:first_name>David</f:first_name></td> 
     <td><f:last_name>Pollak</f:last_name></td> 
    </tr> 
    </lift:show.users> 
</table> 

Ihr Code:

class Show { 
    def users(xhtml: NodeSeq): NodeSeq = 
    Users.findAll.flatMap(user => 
     bind("f", xhtml, 
     "first_name" -> user.firstName, 
     "last_name" -> user.nameName 
    ) 
    ) 
} 

Nun, was Aufzug vorhanden ist, wenn es der Tag-Inhalt <lift:show.users> ruft die entsprechende Methode mit dem Tag der sieht als Argument. Das Tag wird dann durch den Rückgabewert der Methode users ersetzt.

users Die Methode macht die Iteration über alle Users und für jeden Benutzer, es bind die Werte des ersten und die zweiten Namen der inneren xhtml s. Alle diese Iterationen werden dann verkettet (über flatMap) und zurückgegeben.

Als ich mit dem Aufzug anfing, fand ich diesen Ansatz immer etwas zu starr; mit einer kleinen Schleife hier und da, wie könnte das weh tun? Aber jetzt, da ich weiß, wie einfach es ist, und zu nennen, erstellen Sie Ihre eigenen Snippets aus dem Template-Code, ich kann mir nicht vorstellen, irgendetwas wie JSP mehr zu verwenden. Es ist schwach im Vergleich und verstopft Ihr Markup. Und natürlich verlieren Sie viel von Scalas Validierungskraft.

Hinweise:

Der Grund, warum die Template-Tags mit Inhalt gefüllt werden, ist für die Zwecke der Gestaltung. In diesem Fall werden die Dummy-Tags und Werte während der bind ersetzt. Die Template-Designer können somit die Tags mit mehr oder weniger bedeutungsvollem Inhalt füllen, was es dem Codierer ermöglicht, die Semantik, die der Entwickler im Sinn hatte, besser zu verstehen.

+1

Danke für die Erklärung und schnelle Antwort. :) – ksemeks

+0

Warum sind "David" und "Pollack" da drin? –

+0

Weil es vom Lift-Wiki kopiert wurde. – Debilski