2013-11-20 90 views
12

我爲我的模板寫了一個簡單的幫手。這裏的代碼:把手幫手 - 返回HTML不是文字

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

所以我傳遞一個字符串,並通過'|'拆分字符串。字符。我也想把第二部分放到span標籤中。

問題是,返回的結果是純文本,所以我得到了span標籤,如文本而不是HTML。

有沒有人知道有什麼問題?

TNX

回答

31

你必須標記字符串作爲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 
}); 
+2

你應該加上''■如果你打算使用SafeString之前手動HTML編碼'string'。 –

7

你不需要使用SafeString。相反,使用從車把 「三重小鬍子」:

Handlebars web site,HTML中分離部分:

把手HTML的逸出通過返回值的{{表達式}}。如果您不想讓Handlebars逃離某個值,請使用「三重藏匿」{{{。

所以,在你的HTML一個簡單的三重報價將避免逃避:

{{{splitQuote}}}