有一个电梯摘录:
<lift:Login>
<entry:name>
No user logged in
</entry:name>
</lift:Login>
我知道如果用户已登录,我可以Helpers.bind
用户名,但是如何保留包含在其中的前一个文本?当我看到scala api时,似乎没有支持项目前缀元素,xhtml \\ "entry:name"
只产生空节点。那么我怎样才能实现这个目标呢?
编辑:
如果用户登录,我想显示:
User 123
在另一种情况下,我想在片段中显示原始文本,换句话说,我想删除对于框架必不可少的提升前缀标签,但它们与最终用户html无关:
No user logged in
答案 0 :(得分:0)
目前还不清楚你已经尝试了什么,但在大多数情况下,不需要Scala xml转换。使用Helpers.bind
通常就足够了,可以正确处理xml前缀。 (Scala的xml转换API有时在这方面感觉有点不均匀。)
不是100%确定你想要做什么,但如果登录后我就会将用户名绑定到<entry:name/>
,或者显示默认文本。
class Login {
def render(xhtml: NodeSeq) = bind("entry", xhtml, "name" -> name _)
def name(in: NodeSeq) = User.currentUser.map(_.shortName).map(Text(_)) openOr in
}
<强>加成强>:
"name" -> name _
部分意味着应使用name
标记的内容调用方法<entry:name>
,结果应替换整个标记。 (我必须说,我不太确定你对升力的了解;我的印象是,如果一个人知道如何绑定User 123
,那么也应该知道如何绑定其他信息......)
需要使用尾随下划线来帮助编译器。如果您不想对标记的原始内容进行转换,则只需绑定val
或def someMethod: NodeSeq
,然后使用它而不使用下划线甚至内联。例如。 bind("entry", xhtml, "name" -> <span>Some NodeSeq</span>)