Handlebars帮助程序检索使用它的文件的基本名称

我正在寻找一种方法来创build一个帮助器,它只是简单地呈现放置模板的文件的基本名称,而不需要任何额外的参数,如下所示: {{ basename }}

换句话说,如果我在两个部分内部使用了这个助手,比如说header.hbsnavbar.hbs ,我希望每个部分的名字在输出中被渲染。

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

不知道你的设置太多,这是一种方法。

你需要在你的渲染函数中注册一个助手。 然后你将调用渲染而不是编译。 注意下面的是后端,但是你可以很容易地适应你的环境。

把手没有你的环境的概念,所以你需要把它设置在全球的某个地方。

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

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

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