Deb*_*ski 10
简而言之:No.Lift的设计严格地将逻辑与设计分开,因此禁止在模板标记中使用通用标签.
看一下第一篇文章,看看电梯如何处理迭代.
文章中的一个例子:你的标记:
<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>
Run Code Online (Sandbox Code Playgroud)
你的代码:
class Show {
def users(xhtml: NodeSeq): NodeSeq =
Users.findAll.flatMap(user =>
bind("f", xhtml,
"first_name" -> user.firstName,
"last_name" -> user.nameName
)
)
}
Run Code Online (Sandbox Code Playgroud)
现在,当它看到标签<lift:show.users>正在以标签的内容作为参数调用相应的方法时,它会做什么.然后,该标记将被该users方法的返回值替换.
该users方法对所有Users用户进行迭代,对于每个用户,它bind是内部的第一个和第二个名称的值xhtml.然后将所有这些迭代连接起来(通过flatMap)并返回.
当我开始使用升降机时,我总是发现这种方法有点过于僵硬; 在这里和那里有一个小环,怎么可能伤害?但是现在我知道从模板代码调用和创建自己的代码片段是多么容易,我无法想象再使用像jsp这样的东西了.相比之下它很弱并且你的标记变得混乱.当然,你失去了Scala的验证能力.
笔记:
模板标签填充内容的原因是出于设计目的.在这种情况下,虚拟标签和值将在期间被替换bind.因此,模板设计者可以使用或多或少有意义的内容填充标签,这允许编码器更好地理解设计者所考虑的语义.