Handlebars和ExpressJS的多种布局?

如果我使用Handlebars作为Express 4的模板引擎,似乎只有指定一个布局模板的选项才能用于所有视图:

app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'})); 

如果你的应用需要多个布局呢? 如果viewA.hbs使用一个布局,而viewB.hbs需要不同的布局呢?

当我学习nodejs时,我来自PHP Laravel背景,在这个背景下, Blade模板引擎可以指定在每个视图文件的顶部使用哪个布局。 这使得在任何给定视图的布局模板之间切换变得非常简单。

当您调用渲染方法时,您应该能够从路由/控制器传入布局。

 router.get('/', function(req, res) { res.render('home', {layout: 'viewBLayout.hbs'}); }); 

我相当肯定玉可以让你从模板内切换布局,但我不知道你是否可以用把手做到这一点。

如果您使用express-hbs ,则可以在模板中指定一个布局,其注释如下所示:

 {{!< layout}} 

另外,你可以尝试exphbs 。 它也支持布局注释和多个布局可以嵌套。 (免责声明:我写了。)