liftweb有迭代标签吗?

kse*_*eks 1 iteration scala jsp-tags lift

我想知道,Lift是否有一个迭代标记(例如:for,foreach)?当我使用JSP时,我可以轻松地使用JSP迭代List,将对象传递给标记.像这样的东西,或者像这样.我知道这不是最好的例子,但你明白我的意图.总而言之,这与Lift存在,或者如果不存在,我将如何设法做这样的事情?

我想做的最后一件事是硬编码html.

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.因此,模板设计者可以使用或多或少有意义的内容填充标签,这允许编码器更好地理解设计者所考虑的语义.