如何在 hapi.js ejs 布局中获取多个内容区域?
How to get multiple content areas in hapi.js ejs layouts?
我想在 hapi.js 中使用 ejs 在包含布局中呈现的模板中定义信息。例如:
layout.html
<html>
<head>
<title><%- contentFor('title') %></title>
</head>
<body>
<%- content %>
</body>
</html>
index.html
contentFor('title', 'My title')
<h1>My content</h1>
对我来说重要的是,不管它如何工作,不同的布局内容是在模板中定义的,而不是在路由级别传入的。这可能吗?
是的,这一点都不明显。我能够通过以下方式做到这一点:
- 设置默认上下文对象
- 修改模板中的对象
- 在布局中引用该对象的属性
例如:
设置默认上下文对象
server.register(plugins, (err) => {
...
server.views({
context: {
layoutContent: {}
}
})
}
修改模板中的对象
// templates/my_template.html
<%
layoutContent = {
title: 'My Title'
meta: '<meta name="description" content="my content">'
}
%>
引用布局中的对象
// layouts/layout.html
<html>
<head>
<title><%- layoutContent.title %></title>
<%- layoutContent.meta %>
</head>
<body>
<%- content %>
</body>
</html>
如您所见,您可以将文本或整个标签传递给布局。希望这有帮助。
我想在 hapi.js 中使用 ejs 在包含布局中呈现的模板中定义信息。例如:
layout.html
<html>
<head>
<title><%- contentFor('title') %></title>
</head>
<body>
<%- content %>
</body>
</html>
index.html
contentFor('title', 'My title')
<h1>My content</h1>
对我来说重要的是,不管它如何工作,不同的布局内容是在模板中定义的,而不是在路由级别传入的。这可能吗?
是的,这一点都不明显。我能够通过以下方式做到这一点:
- 设置默认上下文对象
- 修改模板中的对象
- 在布局中引用该对象的属性
例如:
设置默认上下文对象
server.register(plugins, (err) => {
...
server.views({
context: {
layoutContent: {}
}
})
}
修改模板中的对象
// templates/my_template.html
<%
layoutContent = {
title: 'My Title'
meta: '<meta name="description" content="my content">'
}
%>
引用布局中的对象
// layouts/layout.html
<html>
<head>
<title><%- layoutContent.title %></title>
<%- layoutContent.meta %>
</head>
<body>
<%- content %>
</body>
</html>
如您所见,您可以将文本或整个标签传递给布局。希望这有帮助。