gpt4 book ai didi

Scala Play 2.4 View 渲染与应用

转载 作者:行者123 更新时间:2023-12-01 11:30:15 27 4
gpt4 key购买 nike

我注意到 views.html.myView.render(...)views.html.myView(...) 都可以用来生成页面从模板。但是,如果我们需要将隐式参数列表传递到 View 中,似乎只有 apply 版本有效,而 render 版本无法编译。

我假设 views.html.myView.apply 可能在幕后委托(delegate)给 views.html.myView.render(或相反),但我'我不确定,也无法在文档中找到与此相关的任何内容。我从 Twirl 文档中唯一能得到的是 TemplateN traits 都定义了 render 方法,但没有一个提到 apply

最佳答案

render 方法旨在从 Java 使用,apply 旨在从 Scala 使用。将委托(delegate)呈现给 apply,它们将具有完全相同的签名除非有多个参数列表(来自柯里化(Currying)或隐式)。

假设我有来自 play-scala 激活器模板的 index.html.scala,修改为添加隐式 Int 参数:

@(message: String)(implicit i: Int)

它将被编译为 target/scala-2.11/twirl/main/views/html/index.template.scala。以下是相关部分:

def apply(message: String)(implicit i: Int): play.twirl.api.HtmlFormat.Appendable = ...

def render(message: String, i: Int): play.twirl.api.HtmlFormat.Appendable =
apply(message)(i)

render 中的参数被压缩到一个列表中。由于您不能使用 Java 中的隐式(或多个参数列表),因此需要在单个列表中显式传递它们。

如果我删除隐含的,它们是相同的:

def apply(message: String): play.twirl.api.HtmlFormat.Appendable = ...

def render(message:String): play.twirl.api.HtmlFormat.Appendable = apply(message)

关于Scala Play 2.4 View 渲染与应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32796721/

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