我是Scala / Lift的初学者,我在使用每个项目上的可选“标签”呈现列表时遇到问题。
我的HTML模板说
<lift:Items.list>
<e:name>Rock</e:name><br />
<e:warning><span style="color:#ff0000;">DANGER!</span></e:warning>
</lift:Items.list>
在Items.scala上我有
def list(node : NodeSeq) : NodeSeq = {
getItems flatMap( it => {
Helpers.bind("e", node,
"name" -> { Text(it.name) },
"warning" -> {
if (it.isDangerous) { <<INSERT HTML FROM TEMPLATE>> }
else { Text("") }
}
)
})
}
在某些情况下,我希望逐字呈现“e:warning”标记的内容。我确信有一种简单的方法可以从“节点”中提取它们,但我想我的Lift知识有一些重大差距,因为我无法弄清楚如何。 如果有人能向我指出正确的程序,我会非常感激。
ANSWERED: 感谢您的建议。我最终构建了这样的代码:
"warning" -> { (n : NodeSeq) => {
if (it.isDangerous) { n } else { Text("") }
}}
答案 0 :(得分:1)
您可以简单地将函数绑定到节点的名称,该名称需要NodeSeq
并返回NodeSeq
。
E.g:
def warning(in: NodeSeq): NodeSeq = doSomethingWith(in)
// ...
Helpers.bind("e", node, "warning" -> warning _)
然后将转换并插入<e:warning>
节点的内容。
答案 1 :(得分:0)
我不确定你想要做什么的目的。如果要显示一个或另一个,请使用chooseTemplate和Box。