Handlebars helper用于检索使用它的文件的基名

时间:2013-03-24 16:52:33

标签: node.js templates handlebars.js helper helpers

我正在寻找一种方法来创建一个帮助程序,只需呈现放置模板的文件的基本名称,而不需要任何其他参数,如:{{ basename }}

换句话说,如果我在两个部分中使用了这个帮助器,比如说header.hbsnavbar.hbs,我希望每个部分的名称都可以在输出的任何地方呈现。

我已经找了好几个小时,找不到任何答案。任何方向或指导都将不胜感激。

2 个答案:

答案 0 :(得分:1)

在不了解您的设置的情况下,这是一种方法。

您需要在渲染功能中注册一个帮助器。然后,您将调用render而不是compile。请注意,以下内容适用于后端,但您可以轻松地将其适应您的环境。

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);
};

答案 1 :(得分:0)

这是渲染文件时需要在上下文中公开的内容。

例如,假设我们在文件路径“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"