如何在 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>

对我来说重要的是,不管它如何工作,不同的布局内容是在模板中定义的,而不是在路由级别传入的。这可能吗?

是的,这一点都不明显。我能够通过以下方式做到这一点:

  1. 设置默认上下文对象
  2. 修改模板中的对象
  3. 在布局中引用该对象的属性

例如:

设置默认上下文对象

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>

如您所见,您可以将文本或整个标签传递给布局。希望这有帮助。