在车把助手中渲染模板(Rendering templates within helpers in h

2019-07-30 13:29发布

大家好!

因为似乎没有这方面的答案: 通过车把局部变量传递的是,我目前工作的一个小变通方法来得到这个工作。 所以,这个想法是要注册这使得有可能值特定模板的辅助功能。 有点代码令它变得更好理解。

这是我如何调用我的帮助:

<div>
    {{myHelper}}
</div>

这帮助注册这个小的代码:

hbs.registerHelper(name, function (args) {
    args = args || {};
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));
    return template(args);
});

我把这个snippiet成一个圈,一次注册不同的助手。 这意味着“名”和“文件”给出。

好了,现在我能够做这样的事:

// 'values' could be something like this:

var values = { headline: 'HEADLINE' }

<div>
    {{myHelper values}}
</div>

在一个帮助我现在就可以测试是否一定值给出:

// myHelper template

<div>
    {{#if headline}}
    <h1>{{headline}}</h1>
    {{/if}}
    <p>Lorem ipsum</p>
</div>

这一点的解决方法对我的作品,但有一个问题。 注册一个帮手如上所述,返回一个普通的HTML转义字符串。 所以,invocing一个帮手不输出渲染HTML代码段。 它输出HTML作为转义字符串。

难道你们任何人有一个想法,我怎样才能让我的代码片段返回HTML为HTML?

/帕斯卡尔

Answer 1:

从把手DOC :

把手不会逃脱Handlebars.SafeString。 如果你写的生成自己的HTML一个帮手,你通常会想返回一个新Handlebars.SafeString(结果)。 在这种情况下,你会想逃离手动参数。

尝试

hbs.registerHelper(name, function (args) {
    args = args || {};
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));

    // return new hbs.SafeString(template(args));
    // From @Maroshii 
    // the SafeString method must be accessed through hbs.handlebars 
    // and not directly through hbs
    // https://github.com/donpark/hbs#handlebars

    return new hbs.handlebars.SafeString(template(args));
});


Answer 2:

我只是想指出的是,使用三层支架无需运行任何其他方法转换为HTML。 例如,访问模板数据时,只需使用三联大括号{{{templateData}}}它可以让你获得原始的HTML。



文章来源: Rendering templates within helpers in handlebars