有电梯片段:
<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
目前尚不清楚你已经尝试过什么,但在大多数情况下,没有必要对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>)