下面的代码工作正常,但路由 //signup 将显示相同的内容(标题除外),因为 res.render 中的第一个参数没有做任何事情,并且因为在布局中我有 {{< index}} 用名称索引呈现 View 。我想要的是动态传递我想要渲染的部分(基本上我希望 res.render 的第一个参数生效)。

应用程序.js

/* Variable declarations */
var express =   require('express'),
    hbs     =   require('hbs'),
    app     =   express();

/* Setttings */
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');
app.set('view options', { layout: 'layout' });

/* Register Partials */
hbs.registerPartials(__dirname + '/views');

/* Routes */
app.get('/signup', function (req, res) {
    res.render('index', {title: 'Welcome'});
});
app.get('/signup', function (req, res) {
    res.render('signup', {title: 'Sign Up'});
});

/* Listeners */
app.listen(80, function () {
  console.log('App started...');
});

布局.hbs
<!DOCTYPE html>
<html>
    <head>
        <title>{{title}}</title>
    </head>
    <body>
        {{> index}}
    </body>
</html>

最佳答案

作为 Handlerbars 3.0 的一部分,包含了动态部分。您可以找到引用 here 。使用这种新语法,部分的名称被评估并动态替换。我正在使用 "express-handlebars": "2.0.1",

布局.hbs

<!DOCTYPE html>
<html>
  <head>
    <title>{{title}}</title>
  </head>
  <body>
    {{> (whichPartial) }}
  </body>
</html>

应用程序.js
/* Routes */
app.get('/', function (req, res) {
   res.render('index', {title: 'Welcome'
        whichPartial: function() {
             return "thePartialNameForIndex";
        }
   });
});
app.get('/signup', function (req, res) {
   res.render('signup', {title: 'Sign Up'
       whichPartial: function() {
             return "thePartialNameForSignup";
       }
   });
});

其中 thePartialNameForIndexthePartialNameForSignup/views 中分配的部分名称。

关于node.js - Handlebars 中的动态部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31905684/

10-16 18:29