Pas*_*cht 9 html rendering templating helpers handlebars.js
大家好!
因为似乎没有答案:通过把手部分传递变量,我正在努力解决这个问题.因此,我们的想法是注册一个辅助函数,该函数使特定模板具有可能的值.一些代码使得理解更好.
这是我如何调用我的助手:
<div>
{{myHelper}}
</div>
Run Code Online (Sandbox Code Playgroud)
这个帮助器注册了这个小代码:
hbs.registerHelper(name, function (args) {
args = args || {};
var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8'));
return template(args);
});
Run Code Online (Sandbox Code Playgroud)
我把这个snippiet放到一个循环中,一次注册不同的帮助器.这意味着给出了'name'和'file'.
好的,现在我可以做这样的事情:
// 'values' could be something like this:
var values = { headline: 'HEADLINE' }
<div>
{{myHelper values}}
</div>
Run Code Online (Sandbox Code Playgroud)
在帮助器中,我现在可以测试是否给出了某些值:
// myHelper template
<div>
{{#if headline}}
<h1>{{headline}}</h1>
{{/if}}
<p>Lorem ipsum</p>
</div>
Run Code Online (Sandbox Code Playgroud)
这个小小的解决方法适合我,但有一个问题.如上所述注册助手,返回纯HTML转义字符串.因此,调用帮助程序不会输出呈现的HTML代码段.它将HTML作为转义字符串输出.
你有没有人知道如何让我的代码片段将HTML作为HTML返回?
/帕斯卡尔
nik*_*shr 21
把手不会逃脱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));
});
Run Code Online (Sandbox Code Playgroud)