我为我的模板写了一个简单的帮手。这是代码:
Handlebars.registerHelper('splitQuote', function (string) {
if (string.indexOf('|') !== -1) {
return string.replace('|', '<span>') + '</span>';
}
return string;
});
所以我传递一个字符串,并将字符串拆分为'|'字符。我还想把第二部分放入span标签。
问题是,返回的结果是纯文本,所以我得到了像文本一样的span标签,而不是HTML。
有谁知道捕获的是什么?
TNX
答案 0 :(得分:34)
如果你想让Handlebars逃脱它,你必须在你的助手中将字符串标记为html。使用Handlebars.safeString
执行此操作。以下内容应符合您的需求
Handlebars.registerHelper('splitQuote', function(string) {
if (string.indexOf('|') !== -1) {
return new Handlebars.SafeString(string.replace('|', '<span>') + '</span>');
}
return string;
});
正如评论中所提到的,在进行自定义格式化之前,您应该使用Handlebars.Utils.escapeExpression(string)
来转义传递的字符串以对字符串进行编码。我建议这样写:
Handlebars.registerHelper('splitQuote', function(string) {
string = Handlebars.Utils.escapeExpression(string);
if (string.indexOf('|') !== -1) {
string = string.replace('|', '<span>') + '</span>';
}
return new Handlebars.SafeString(string); // mark as already escaped
});
答案 1 :(得分:23)
您无需使用SafeString
。相反,使用车把的“三重胡须”:
来自Handlebars web site,HTML转义部分:
Handlebars HTML-escapes {{expression}}返回的值。如果您不希望Handlebars转义值,请使用“triple-stash”,{{{。
因此,html中的简单三重引号将避免转义:
{{{splitQuote}}}