2

我正在寻找一种方法来创建一个助手,它只呈现放置模板的文件的基本名称,并且不需要任何额外的参数,例如:{{ basename }}.

换句话说,如果我在两个部分中使用这个助手,比如header.hbsand navbar.hbs,我希望每个部分的名称都会在输出中呈现在它们被使用的任何地方。

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

4

2 回答 2

1

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

您需要在渲染函数中注册一个助手。然后您将调用渲染而不是编译。请注意,以下内容适用于后端,但您可以轻松地将其适应您的环境。

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);
};
于 2013-03-27T00:45:42.330 回答
1

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

例如,假设我们在文件路径“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"
于 2017-02-11T01:17:20.480 回答