Scala播放模板vararg HtmlContent
我在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |