Playframework 如何在Play框架的视图中排除可重用组件?
我希望正确考虑我的观点,避免产生太多重复。我使用的是Play框架,我想要考虑的元素是基本的公共元素——页眉、页脚和导航元素 这种保理的标准模式是什么?当我读到视图继承特性时,它们听起来好像不允许重用组件 我正在使用Play的2.0版Playframework 如何在Play框架的视图中排除可重用组件?,playframework,views,Playframework,Views,我希望正确考虑我的观点,避免产生太多重复。我使用的是Play框架,我想要考虑的元素是基本的公共元素——页眉、页脚和导航元素 这种保理的标准模式是什么?当我读到视图继承特性时,它们听起来好像不允许重用组件 我正在使用Play的2.0版 比如说,我有一个多页面的通用布局,我希望有可交换的位——比如,中心内容位和页脚,我显示的不同页面有不同的页脚和内容组合。我可以想到两件事。第一种情况是,当您拥有页面的骨架,并且希望每个视图都填充该骨架的一个部分时,例如,这将是您的骨架: main.html: &l
比如说,我有一个多页面的通用布局,我希望有可交换的位——比如,中心内容位和页脚,我显示的不同页面有不同的页脚和内容组合。我可以想到两件事。第一种情况是,当您拥有页面的骨架,并且希望每个视图都填充该骨架的一个部分时,例如,这将是您的骨架: main.html:
<!DOCTYPE HTML>
<html>
<head>
<title>#{get 'title' /}</title>
</head>
<body>
#{doLayout /}
</body>
</html>
#{extends 'main.html' /}
#{set title:'Your title' /}
<div>
Your content
</div>
<div id="footer">
#{include 'Application/footer.html' /}
</div>
<span>This will be rendered inside the "footer" div</span>
#{获取“标题”/}
#{doLayout/}
这将是使用它的页面之一:
ex1.html:
<!DOCTYPE HTML>
<html>
<head>
<title>#{get 'title' /}</title>
</head>
<body>
#{doLayout /}
</body>
</html>
#{extends 'main.html' /}
#{set title:'Your title' /}
<div>
Your content
</div>
<div id="footer">
#{include 'Application/footer.html' /}
</div>
<span>This will be rendered inside the "footer" div</span>
#{扩展'main.html'/}
#{设置标题:'Your title'/}
你的内容
这样,您就不必担心所有常见的“包装器”代码,并且与在该示例中设置标题的方式相同,您还可以向标题添加样式表或javascript链接
第二种方法是让页面包含在单独模板中执行的代码段,以便可以重用它们:
example2.html:
<!DOCTYPE HTML>
<html>
<head>
<title>#{get 'title' /}</title>
</head>
<body>
#{doLayout /}
</body>
</html>
#{extends 'main.html' /}
#{set title:'Your title' /}
<div>
Your content
</div>
<div id="footer">
#{include 'Application/footer.html' /}
</div>
<span>This will be rendered inside the "footer" div</span>
#{包括'Application/footer.html'/}
footer.html:
<!DOCTYPE HTML>
<html>
<head>
<title>#{get 'title' /}</title>
</head>
<body>
#{doLayout /}
</body>
</html>
#{extends 'main.html' /}
#{set title:'Your title' /}
<div>
Your content
</div>
<div id="footer">
#{include 'Application/footer.html' /}
</div>
<span>This will be rendered inside the "footer" div</span>
这将在“footer”div中呈现
不确定从这样一个简单的解释中是否清楚何时使用哪一个,我认为一旦你得到了差异是很自然的,我一直都在使用这两者。你应该使用所描述的
布局和标签的组合
Layout
包装当前视图,因此它是开始和结束HTML结构、将脚本添加到HTML文档的head
部分以及放置典型元素(例如带有徽标的稳定页眉、带有版权的页脚等)的最佳位置。如果您在所有页面上都有相同的主导航,您也可以将其放在布局中,然后,您可以将参数添加到布局视图中,以便轻松更改活动项的CSS类。请注意,如果示例中有两个不同版本的主导航(例如,一个用于普通用户,第二个仅用于管理员),则可以创建两个不同的布局或使用一个布局,并根据从初始视图传递的某些参数显示两个不同的版本
标记
用于将代码注入当前视图(因此它们的作用与布局正好相反)。它们是没有布局的常见视图,也是带有参数的函数。它们主要用于在每页甚至请求上放置正在更改的内容,例如通知框(来自文档:success
,error
,等等)。此外,它们对于次导航也很有用,特别是当主导航的每个“分支”上都有更改时,并且可能在某些页面上根本不应该显示
您还可以在布局中使用标记
(可能反之亦然),因此您可以看到,有许多可能性:)
注意:palako的示例很好地说明了这一点,但它是Play 1.x模板引擎、Play 2.x检查引用和/或Play源代码附带的示例应用程序的典型示例。这些示例适用于Play 1.x模板系统。啊,是的。我还没有用过2.x。这部分也不向后兼容吗?是的,它也不兼容,Play 2.0提供了自己的基于Scala的模板引擎,它是完全类型化的,可能比Play 1中的这个编译引擎快得多。