繁体   English   中英

如何在Node中注册和使用Handlebars助手?

[英]How can I register and use a Handlebars helper with Node?

我正在使用带有Node的Handlebars,这很好用:

require('handlebars');
var template = require('./templates/test-template.handlebars');
var markup = template({ 'some': 'data' });
console.log(markup);

这很好。 但是,我需要在模板中注册并使用自定义帮助程序。 所以,现在我的代码看起来像这样:

var Handlebars = require('handlebars');

Handlebars.registerHelper('ifEqual', function(attribute, value) {
    if (attribute == value) {
        return options.fn(this);
    }
    else {
        return options.inverse(this);
    }
});

var template = require('./templates/test-template.handlebars');
var markup = template({ 'some': 'data' });
console.log(markup);

但现在当我运行我的脚本时,我得到了

错误:缺少助手:'ifEqual'

那么:如何在Node中定义和使用自定义助手?

我想到了。 我需要这样做:

var Handlebars = require('handlebars/runtime')['default'];

真正酷的是,这甚至可以在浏览器中使用Browserify。

但是,我发现更好的方式(可能是“正确的”方式)是通过(shell命令)预编译Handlebars模板:

handlebars ./templates/ -c handlebars -f templates.js

然后我这样做:

var Handlebars = require('handlebars');
require('./templates');
require('./helpers/logic');

module.exports.something = function() {
    ...
    template = Handlebars.templates['template_name_here'];
    ...
};

这是我做的方式。
我想现在它有点不同了。

const Handlebars = require('handlebars');

module.exports = function(){
    Handlebars.registerHelper('stringify', function(stuff) {
        return JSON.stringify(stuff);
    });
};

然后我做了一个小脚本来调用所有助手上的require,这样他们就跑了。

// Helpers Builder
let helpersPath = Path.join(__dirname, 'helpers');
fs.readdir(helpersPath, (err, files) => {
    if (err) {throw err;}
    files.filter((f) => {
        return !!~f.indexOf('.js');
    }).forEach((jsf) => {
        require(Path.join(helpersPath, jsf))();
    });
});

或者简单的方法

require('./helpers/stringify')();

事实上,你甚至不必将它作为一个函数导出,你根本不能导出任何东西,只需从另一个js文件调用require而不是函数参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM