如何在hapi.js ejs布局中获得多个内容区域?

时间:2017-05-15 17:06:21

标签: node.js ejs hapijs hapijs-vision

我想在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 个答案:

答案 0 :(得分:1)

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

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

    设置默认上下文对象

    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>
    

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