加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala播放模板vararg HtmlContent

发布时间:2020-12-16 08:55:59 所属栏目:安全 来源:网络整理
导读:我在play 2.6中有一个通用模板,我希望传递可变数量的 HtmlContents.我已经定义了这样的模板(包括我改变任何东西的隐式参数): @(foo: String)(content: Html*)(implicit bar: Bar) 在模板方面,这很好 – 我可以用for解析内容并按我的意愿渲染它.但是,我还没
我在play 2.6中有一个通用模板,我希望传递可变数量的 HtmlContents.我已经定义了这样的模板(包括我改变任何东西的隐式参数):

@(foo: String)(content: Html*)(implicit bar: Bar)

在模板方面,这很好 – 我可以用for解析内容并按我的意愿渲染它.但是,我还没有找到一种从底层模板调用变量参数的简洁方法.

例如,我有一个名为“Baz”的视图:

@(something: String)(implicit bar: Bar)

在其中,我尝试使用多个Html参数调用模板.我尝试过以下方法:

@template("fooString"){{123},{abc}}
and
@template("fooString")({123},{abc})
and
@template("fooString"){{123},{abc}})

和其他各种排列,但在一个封闭的括号内,它似乎在字面上将所有内容解释为HtmlContent vararg中的单个参数.

然而,这最终按照我的意图工作,传递了多个HtmlContents:

@template("fooString")(Html("123"),Html("abc"))

这样可行,我可以使用三引号内插字符串作为一个大的Html块 – 但似乎应该有一个更简洁的方法来执行此操作,并且字符串插值是危险的,因为它不会执行html转义.

有没有办法使用{封闭语法?我想更深入地了解基础层面上实际发生的事情,以及如何在括号中解析和生成HtmlContent.

解决方法

所以考虑一下你的模板

// main.scala.html
@(title: String)(contents: Html*)

您可以通过不同的方式调用此模板

选项1

这是您已经在问题中发布的内容

@main("This is a title")(Html("abc"),Html("123"))

选项#2

@html1 = {
    Hello
}
@html2 = {
    <div>Tarun</div>
}

@main("This is a title")(html1,html2)

选项#3

@main("This is a title")(Html(<div>Tarun
</div>.toString),Html(<div>
Lalwani
</div>.toString))

选项#4

这不是完全相同的选项,但需要更改模板签名本身

@(title: String)(contents: List[String])

然后在下面调用它

@main("This is a title")(List(
  """<div>
     Tarun
    </div>
  ""","""Hello"""))

选项#5

这需要代码文件,并已在另一个SO线程上得到解答

Paul Draper’s回答Paul Draper’s

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读