把手助手 - 返回HTML而不是文本

时间:2013-11-20 19:15:13

标签: javascript handlebars.js helpers

我为我的模板写了一个简单的帮手。这是代码:

Handlebars.registerHelper('splitQuote', function (string) {
    if (string.indexOf('|') !== -1) {
        return string.replace('|', '<span>') + '</span>';
    }
    return string;
});

所以我传递一个字符串,并将字符串拆分为'|'字符。我还想把第二部分放入span标签。

问题是,返回的结果是纯文本,所以我得到了像文本一样的span标签,而不是HTML。

有谁知道捕获的是什么?

TNX

2 个答案:

答案 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}}}