Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 带把手和ExpressJS的多种布局?_Node.js_Express_Template Engine_Handlebars.js - Fatal编程技术网

Node.js 带把手和ExpressJS的多种布局?

Node.js 带把手和ExpressJS的多种布局?,node.js,express,template-engine,handlebars.js,Node.js,Express,Template Engine,Handlebars.js,如果我将Handlebar用作Express 4的模板引擎,则似乎只有一个选项可以指定一个布局模板用于所有视图: app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'})); 如果你的应用需要多个布局怎么办?如果viewA.hbs使用一种布局,而viewB.hbs需要不同的布局,该怎么办 当我学习nodejs时,我来自一个phplaravel背景,在这里,您可以指定在每个视图文件的顶部使用哪个布局。这使得

如果我将Handlebar用作Express 4的模板引擎,则似乎只有一个选项可以指定一个布局模板用于所有视图:

app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));
如果你的应用需要多个布局怎么办?如果
viewA.hbs
使用一种布局,而
viewB.hbs
需要不同的布局,该怎么办


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

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

router.get('/', function(req, res) {
    res.render('home', {layout: 'viewBLayout.hbs'});
});
我很确定jade会让你从模板内部切换布局,但我不知道你是否可以用把手来切换布局。

如果你使用,你可以在模板中指定一个布局,并给出如下注释:

{{!< layout}}
{{!

或者,你可以试试。它还支持布局注释,可以嵌套多个布局。(免责声明:是我写的。)

确保首先在/layouts目录中创建两个名为“main.handlebar”和“backend.handlebar”的文件:

例如,如果需要,请在两条路线上尝试此代码

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

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

谢谢附带问题:为什么会有这么多不同的express Handlebar实现?快车哈佛商学院、快车哈佛商学院、快车哈佛商学院等?很高兴你这么问。我认为我没有资格回答这个问题。但根据我自己的经验,一个充满活力的社区通常是件好事唯一的缺点是项目A实施了伟大的想法1,项目B实施了伟大的想法2。你不可能两者兼得,如果人们只是在一个项目上进行合作,同时包含两个伟大的想法,那会更好。