gpt4 book ai didi

html - Scala Play 模板可变参数 HtmlContent

转载 作者:太空狗 更新时间:2023-10-29 13:51:44 26 4
gpt4 key购买 nike

我在 play 2.6 中有一个通用模板,我想传入可变数量的 HtmlContent。我已经像这样定义了 template(包括我拥有的隐式参数,以防发生任何更改):

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

在模板方面,这很好用——我可以用 for 分解 content 并根据需要呈现它。但是,我一直无法找到一种从底层模板调用变量参数的简洁方法。

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

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

在其中,我尝试使用多个 Html 参数调用 template。我尝试了以下方法:

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

以及各种其他排列,但在封闭括号内,它似乎将所有内容都按字面解释为 HtmlContent 可变参数中的单个参数。

然而,这最终如我所愿,传递了多个 HtmlContents:

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

这样就可以了,我可以对一个大的 Html block 使用一个三引号内插字符串——但似乎应该有一种更简洁的方法来做到这一点,而且字符串内插是危险的,因为它不这样做html 转义。

有没有办法使用 { 封闭的语法来做到这一点?我想了解更多底层实际发生的事情,以及 play 如何解析和生成括号中的 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回答Why doesn't this pass multiple HTML parameters to template

关于html - Scala Play 模板可变参数 HtmlContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com