使用hapi和handlebars,使用hapi的默认布局支持,可以从页面中选择替代布局吗?

时间:2015-03-17 22:11:45

标签: templates layout handlebars.js hapijs

Another answer和hapi api表明hapi在使用手柄栏时已经内置了对布局的支持。但是,似乎只允许在配置中定义的一个布局作为默认布局' layout.html'的替代方案。布局。

that answer中展示了如何使用把手布局来使用把手布局支持在这样的页面中执行此操作:

{{#extend "layout2"}}{{/extend}}

虽然我可以使用把手布局,但我想使用hapi提供的内置内容。

是否有可能拥有超过默认布局并在页面模板中选择该布局?也许是这样的:

{{!< layout/layout2}}

1 个答案:

答案 0 :(得分:4)

您可以在reply.view()中覆盖视图管理器配置:

  

options - 用于覆盖此响应的服务器视图管理器配置的可选对象。无法覆盖仅在初始化时加载的isCachedpartialsPathhelpersPath

以下是一个例子:

index.js:

var Handlebars = require('handlebars');
var Hapi = require('hapi');
var Path = require('path');

var server = new Hapi.Server()
server.connection({
    host: '127.0.0.1',
    port: 8000
});

server.views({
    engines: {
        html: Handlebars.create()
    },
    path: Path.join(__dirname, 'views'),
    layoutPath: Path.join(__dirname, 'views/layouts'),
    layout: 'default'
});

server.route({
    method: 'GET',
    path: '/default',
    handler: function (request, reply) {

        reply.view('item', { title: 'Item Title', body: 'Item Body' });
    }
});

server.route({
    method: 'GET',
    path: '/custom',
    handler: function (request, reply) {

        reply.view('item', { title: 'Item Title', body: 'Item Body' }, { layout: 'custom' });
    }
});

server.start();

视图/布局/ custom.html:

<html>
  <body>
    <h1>Custom Layout</h1>
    {{{content}}}
 </body>
</html>

视图/布局/ default.html中:

<html>
  <body>
    <h1>Default Layout</h1>
    {{{content}}}
 </body>
</html>

视图/ item.html:

{{body}}

当您访问http://localhost:8000/default时,它将使用default.html。但是http://localhost:8000/custom将使用custom.html