在 (Scala) Lift 中,使用 Helpers.bind 时如何从模板渲染原始 HTML

发布于 2024-10-08 09:57:48 字数 1025 浏览 7 评论 0原文

我是 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 知识存在一些重大差距,因为我不知道如何进行。 如果有人能向我指出正确的程序,我将非常感激。


回答: 谢谢你的建议。我最终像这样构建我的代码:

    "warning" -> { (n : NodeSeq) => {
                  if (it.isDangerous) { n } else { Text("") }
                 }}

I'm a Scala/Lift beginner and I'm having trouble with rendering a list with optional "tags" on each item.

My HTML template says

<lift:Items.list>
  <e:name>Rock</e:name><br />
  <e:warning><span style="color:#ff0000;">DANGER!</span></e:warning>
</lift:Items.list>

And on the Items.scala I have

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("") }
                         }
                  )
  })
}

I'd like to, in certain cases, have the contents of the "e:warning" tag rendered verbatim. I'm sure there's an easy way to extract them from "node", but I guess I have some major gaps in my Lift knowledge because I can't figure out how.
If anyone could point out the proper procedure to me I'd be very thankful.


ANSWERED:
Thanks for the advice. I ended up structuring my code like this:

    "warning" -> { (n : NodeSeq) => {
                  if (it.isDangerous) { n } else { Text("") }
                 }}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

屌丝范 2024-10-15 09:57:48

您只需将一个函数绑定到节点名称,该函数接受 NodeSeq 并返回 NodeSeq

例如:

def warning(in: NodeSeq): NodeSeq = doSomethingWith(in)

// ...

Helpers.bind("e", node, "warning" -> warning _)

节点的内容将被转换和插入。

You can simply bind a function to the node’s name which takes a NodeSeq and returns a NodeSeq.

E.g.:

def warning(in: NodeSeq): NodeSeq = doSomethingWith(in)

// ...

Helpers.bind("e", node, "warning" -> warning _)

The contents of the <e:warning> node will then be transformed and inserted.

谁与争疯 2024-10-15 09:57:48

我不确定你想做的事情的目的。如果您想显示一件事或另一件事,请使用 ChooseTemplate 和 Box。

I'm not sure on the purpose of what you are trying to do. If you want to display one thing or the other, use chooseTemplate and a Box.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文