2015-08-09 2 views
3

Приведенный ниже код работает нормально, но маршруты / и /signup будут показывать то же самое (кроме названия), потому что первый аргумент в res.render ничего не делает, и поскольку в макете у меня есть {{< index}}, которые отображают с индексом имени. Я хочу динамически передать часть, которую я хочу отобразить (в основном я хочу, чтобы первый аргумент res.render имел эффект).Динамические частичные в рулях

app.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...'); 
}); 

Layout.hbs

<!DOCTYPE html> 
<html> 
    <head> 
     <title>{{title}}</title> 
    </head> 
    <body> 
     {{> index}} 
    </body> 
</html> 

ответ

4

В рамках Handlerbars 3.0 динамические парциальные включены. Вы можете найти ссылку here. С помощью этого нового синтаксиса имя частичного оценивается и динамически заменяется. Я использую "express-handlebars": "2.0.1",.

Layout.hbs

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

App.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"; 
     } 
    }); 
}); 

Где thePartialNameForIndex и thePartialNameForSignup являются имя из парциальных, выделенных в /views.

Смежные вопросы