我在express.js中使用handlebars.js hbs包装器。我的模板可以正常工作,但是我需要添加局部视图以与视图一起呈现。
我想做这样的事情:
hbs.registerPartial('headPartial', 'header'); // where "header" is an .hbs file in my views folder
但是,它抛出“找不到标头部分”。
如果我将html字符串传递给第二个参数,则可以使registerPartial起作用,但是我想对局部对象使用单独的视图文件。
我还没有找到任何文档,但是希望我可能缺少一些简单的东西。
有谁知道如何在registerPartial方法中使用视图文件?如果是这样,我该如何实施?
更新
为了提供更多的上下文,让我添加更多的代码。这是我的“服务器”文件-app.js
var express = require('express') , routes = require('./routes') , hbs = require('hbs'); var app = module.exports = express.createServer(); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'hbs'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // this is the line that generates the error hbs.registerPartial('headPartial', 'header'); // What I'm expecting is for "headPartial" to be a compiled template partial // of the template within views/header.hbs, but it is not loading this way. // If I do something like hbs.registerPartial('headPartial', '<p>test</p>'); // then it does work. I need to know how to pass an .hbs file to the // registerPartial method. // Routes app.get('/', routes.index); app.listen(3000);
这是我的routes.index文件:
exports.index = function(req, res){ res.render('index', { title: 'Express' }) };
在我的views文件夹中,我有三个模板:
views/ header.hbs (this is my partial) index.hbs layout.hbs
在我的index.hbs文件中,我使用以下命令调用“ headPartial”部分:
{{> headPartial}}
任何帮助是极大的赞赏。
此代码将所有部分模板加载到目录中,并使它们按文件名可用:
var hbs = require('hbs'); var fs = require('fs'); var partialsDir = __dirname + '/../views/partials'; var filenames = fs.readdirSync(partialsDir); filenames.forEach(function (filename) { var matches = /^([^.]+).hbs$/.exec(filename); if (!matches) { return; } var name = matches[1]; var template = fs.readFileSync(partialsDir + '/' + filename, 'utf8'); hbs.registerPartial(name, template); });