Halten Sie Text in Lift-Schnipsel
Frage
gibt es einen Aufzug Snippet:
<lift:Login>
<entry:name>
No user logged in
</entry:name>
</lift:Login>
Ich weiß, dass ich die Benutzername Helpers.bind
kann, wenn der Benutzer angemeldet ist, aber wie kann ich den früheren Text in geschlossenen bewahren? Es scheint keine Unterstützung Projekt voran Elemente zu sein, wenn ich scala api sehen, xhtml \\ "entry:name"
Ausbeuten nichts mehr als leerer Knoten. Also, wie kann ich erreichen, um dieses Ziel? BEARBEITEN: Für den Fall, wenn der Benutzer angemeldet ist, möchte ich zeigen:
User 123
Im anderen Fall mag ich den ursprünglichen Text im Code-Schnipsel zeigen, mit anderen Worten, ich möchte nur den Liftvoran Tags entfernen, die für Rahmen unverzichtbar sind, aber sie haben nichts Endbenutzers html zu tun:
No user logged in
Lösung
Es ist nicht klar, was Sie bereits versucht haben, aber in den meisten Fällen gibt es keine Notwendigkeit für Scala XML-Transformationen. Helpers.bind
Verwendung von in der Regel ausreichend und kann mit XML-Präfixen richtig umgehen. (Scala XML-Transformationen API manchmal fühlt sich ein wenig uneben in dieser Hinsicht.)
Nicht 100% sicher, was Sie tun wollen, aber das ist, wie ich die Benutzername <entry:name/>
in, wenn Sie angemeldet binden würde sonst den Standardtext angezeigt.
class Login {
def render(xhtml: NodeSeq) = bind("entry", xhtml, "name" -> name _)
def name(in: NodeSeq) = User.currentUser.map(_.shortName).map(Text(_)) openOr in
}
Addition :
Der "name" -> name _
Teil bedeutet, dass das Verfahren name
sollte mit dem Inhalt des <entry:name>
-Tages und das Ergebnisses sollte den gesamten Tag ersetzt aufgerufen werden. (Ich muss sagen, ich bin nicht ganz sicher, was Sie bereits über Lift wissen, mein Eindruck ist, dass, wenn man weiß, wie man binden User 123
sollte man auch wissen, wie andere Informationen zu binden ...)
Der Hinterstrich benötigt wird, um hier den Compiler zu helfen. Wenn Sie nicht über eine Transformation des ursprünglichen Inhalts des Tags tun wollen, würden Sie einfach bindet ein val
oder ein def someMethod: NodeSeq
und es dann ohne Unterstrich oder auch Inline. Z.B. bind("entry", xhtml, "name" -> <span>Some NodeSeq</span>)