通常情况下,当一个模板使用继承,它可能使父模板的内容。 例如,在Twig
:
{% extends "base.html" %}
{% block sidebar %}
{{ parent() }}
...
{% endblock %}
这意味着,如果我有时不需要父模板的内容,我只是简单地删除parent()
函数。 我怎样才能做到这一点Scala
模板?
通常情况下,当一个模板使用继承,它可能使父模板的内容。 例如,在Twig
:
{% extends "base.html" %}
{% block sidebar %}
{{ parent() }}
...
{% endblock %}
这意味着,如果我有时不需要父模板的内容,我只是简单地删除parent()
函数。 我怎样才能做到这一点Scala
模板?
您可以先创建在子视图中的HTML块,然后将它传递给父( 布局 ):
@sidebar = {
<div>MySidebar</div>
}
@parent(sidebar){
<div>Main content of the child view</div>
}
因此,在parent.scala.html
布局你会使用它,就像
@(sidebar: Html = null)(content: Html)
<div id="parent-wrap">
@sidebar
@content
</div>
当然,如果你要使用许多子页面,如果你使用一个标签 ,而不是宣称的,你会做的更好相同的HTML代码@sidebar
在每个视图块。 请记住,标签是没有什么更多的则只是一个阶视图(模板),你可以把它作为任何其他视图。 只要创建一个普通视图 app/views/tags
,即: sidebar.scala.html
与所需的HTML块,这样你就可以在以后使用的地方,如:
<div class="span3">@tags.sidebar("content to pass")</div>
或传递给更高级别的布局等的块:
@parent(tags.sidebar(additionalContent)){
<div>Main content of the child view</div>
}
TBH我从来不知道什么是包括视图和标签之间的区别;)
那么,观点都只是在播放功能。 你不能继承他们,但你可以很容易地定义可重复使用的模块:
@parent() = {
...
}
然后再用它的任何地方:
<div ....sidebar>
@parent()
</div>
该工作例子是这样的:
base.scala.html
@(title: String)(content: Html)
<html>
<head><title>@title</title></head>
<body>
<div class=...>@content</div>
</body>
</html>
index.scala.html
@(someParam: String)
@base("index") {
<h1>@someParam</h1>
}
如果你不需要你的索引页共享基地的行为-只要不使用@base
:
index.scala.html
@(someParam: String)
...some other content
@someParam
...more content
像这样:
parent.scala.html
@(title: String)(content: (() => Html) => Html) {
<div class="parent">
<h2>@title</h2>
@content { () =>
<p>This is the parents optional contribution to the sidebar.</p>
}
</div>
child.scala.html
@parent("Some title") { parentSidebar =>
<p>Blah blah blah.</p>
<div class="sidebar">
...
@parentSidebar()
</div>
}
因此,家长需要一个函数,它返回的HTML功能。