我一直在阅读Play上的文档!网站,无法查看它在哪里解释了什么参数组以及它们将用于什么。
有什么区别:
@(title: String)(user: User)
和
@(title: String, user: User)
如果有人可以帮助我,我们将非常感激。
答案 0 :(得分:1)
正如@mgosk在评论中建议的那样,多个参数列表是Scala函数的标准功能,Google可以比我更好地回答这个问题。
关于特别是播放模板,但它们非常有用。
TLDR 播放模板中的参数组对以下内容非常有用:
您可能使用它们的一个原因是将隐式参数传递给视图。隐式参数由编译器添加到调用站点,并且作为spec points out,它们必须在最后(或唯一)参数列表中标记为,例如:
@(title: String)(implicit request: RequestHeader)
<h1>@title</h1>
The path is for this request is <b>@request.path</b>.
从动作中调用该模板时,只要有一个范围(see here for more details on that),您就不必明确提供请求标头。
模板中多个参数列表的另一个非常有用的用途是&#34;包装&#34;内容,特别是考虑到可以使用braces instead of parenthesis调用Scala函数。假设您有一些部分模板,例如代表几个不同的小部件,但这些模板总是被相同的样板HTML包围。然后,您可以创建一个模板包装器(称为widgetWrapper.scala.html
),如下所示:
@(name: String)(details: Html)
<div class="item">
<div class="item-name">@name</div>
<div class="item-body">
@details
</div>
</div>
可以这样调用:
@(item: WidgetA)
@widgetWrapper(item.name) {
<ul class="item-details">
<li>@item.detail1</li>
<li>@item.detail2</li>
</ul>
}
最后一种技术是如何定义标准化的&#34;页面镀铬&#34;或网站,例如(文件standardLayout.scala.html
):
@(title: String)(content: Html)(sidebar: Html)
<html>
<head>
<title>@title</title>
</head>
<body>
<header>
<h1>@title</h1>
</header>
<article>@content</article>
<aside>@sidebar</aside>
</body>
</html>
像这样使用:
@()
@standardLayout("My Page on Goats") {
<p>
Lots of text about goats...
</p>
} {
<ul class="sidebar-links">
<li><a href="https://en.wikipedia.org/wiki/Goat">More about goats!</li>
</ul>
}
正如您所看到的,两个大括号分隔部分中的内容将作为Twirl Html
传递给布局模板,分别为主要内容和侧边栏(标题在第一个参数中传递为字符串)。
多个参数组可以实现这种便利。