我正在寻找一种方法来创建一个助手,它只呈现放置模板的文件的基本名称,并且不需要任何额外的参数,例如:{{ basename }}
.
换句话说,如果我在两个部分中使用这个助手,比如header.hbs
and navbar.hbs
,我希望每个部分的名称都会在输出中呈现在它们被使用的任何地方。
我已经找了几个小时,找不到任何答案。任何方向或指导将不胜感激。
我正在寻找一种方法来创建一个助手,它只呈现放置模板的文件的基本名称,并且不需要任何额外的参数,例如:{{ basename }}
.
换句话说,如果我在两个部分中使用这个助手,比如header.hbs
and navbar.hbs
,我希望每个部分的名称都会在输出中呈现在它们被使用的任何地方。
我已经找了几个小时,找不到任何答案。任何方向或指导将不胜感激。
在不了解您的设置的情况下,这是一种方法。
您需要在渲染函数中注册一个助手。然后您将调用渲染而不是编译。请注意,以下内容适用于后端,但您可以轻松地将其适应您的环境。
Handlebars 对您的环境没有概念,因此您需要在某个地方全局设置它。
exports.render = function (name, req, context) {
if (isBrowser()) {
throw new Error('Render cannot be called client-side.');
}
handlebars.registerHelper('basename', function() {
var host = globalBasenameSetFromEnvironment;
return host;
});
if (!handlebars.templates[name]) {
throw new Error('Template Not Found: ' + name);
}
return handlebars.templates[name](context);
};
这是渲染文件时需要在上下文中公开的内容。
例如,假设我们在文件路径“some/template.hbs”中有一个模板,它在
Basename is: "{{basename}}"
我们可以这样渲染:
var fs = require('fs');
var hbs = require('handlebars');
var filepath = 'some/template.hbs';
var tmpl = fs.readFileSync(filepath, 'utf8');
var fn = hbs.compile(tmpl);
var str = fn({
path: filepath,
basename: path.basename(filepath)
});
console.log(str);
// Basename is: "template.hbs"