快速4把手渲染没有布局

时间:2015-05-26 13:36:04

标签: node.js express handlebars.js

快递4应用中有没有办法在不使用布局的情况下渲染视图?

我在项目中有一个layout.hbs。该文件似乎无需在任何地方注册即可使用,对于大多数视图来说都可以,但是如果只需要渲染一个视图呢?

5 个答案:

答案 0 :(得分:36)

假设您正在使用快速把手,则可以在调用render方法时指定与路径/控制器不同的布局。要完全摆脱布局,可以将布局设置为false

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

https://github.com/ericf/express-handlebars#layouts

答案 1 :(得分:0)

应该很清楚,当您要渲染数据时,layout应仅仅是此类数据的额外属性

var data = {
    layout: false, 
    var1: var1,
    var2: var2
};

res.render('home', data); 

答案 2 :(得分:0)

如果您不想给出布局,则必须指定为layout: false。否则应用程序将崩溃。您可以根据需要进行以下配置。

app.get('/', (req, res, next) => {
    res.render('shop', { title: 'My Shop', layout: false })
});

enter image description here

答案 3 :(得分:0)

如果您正在使用app.render()函数来呈现html。 您可以选择Rayan's answer。 正如express documentation本身提到的那样,res.render()方法在后台也使用app.render()方法。

const app = require('express')();
app.set('view engine', 'hbs');
/**
 * Render email template with data
 * 
 * @param {String} emailTemplate email template path
 * @param {Object} renderParams Render parameters
 * @return {Promise} rendered template
 */
async function renderEmail(emailTemplate, renderParams) {
 const renderParams = { layout: false, ...otherRenderParams };

 return await new Promise((resolve, reject) => {
   app.render(emailTemplate, renderParams, function (err, html) {
       if (err) return reject(err);
       return resolve(html);
   });
 });
}

答案 4 :(得分:0)

这对我来说有 1 个没有 main.handlebars 布局的页面:

  1. 向数据对象添加布局 false:
object.layout=false;
  1. 渲染
res.render('page', object);

.layout 添加到现有对象允许您仍然轻松地传递对象数据。