我创建了一个Handlebars帮助器,如下所示。
Handlebars.registerHelper("format_currency", function(value, currency){
var symbol = "";
if(currency === "EUR") symbol = "€";
else if ... // other code here
return value + " " + symbol;
});
我以下列方式使用
{{format_currency amount currency}}
当我运行应用程序应用程序时,值字段具有正确的值(比如1.5),而对象中的货币散列哈希属性。为什么?在这里,我希望我输入的货币(比如说“EUR”)。
我错过了什么吗?感谢。
答案 0 :(得分:5)
我不知道“散列内部哈希属性的对象”是什么意思,但我发现你的助手(或者你使用它的方式)有一个问题会导致它产生奇怪的结果。
当您使用{{...}}
时,Handlebars期望纯文本,因此它将对HTML进行编码。因此,如果您的symbol
最终为"€"
,则&符将采用HTML编码,您将获得€
添加到您的模板,而不是欧元符号的Unicode实体。
解决此问题有几种方法。
解决编码问题的一种方法是在模板中使用三重网页来禁用HTML编码:
{{{format_currency amount currency}}}
演示:http://jsfiddle.net/ambiguous/Q4FcR/
另一种方法是放弃实体,转而使用原始Unicode欧元字符:
if(currency === "EUR")
symbol = '€';
然后您不必担心双重存储或三重存储或HTML编码或...
演示:http://jsfiddle.net/ambiguous/Mfuk7/
另一种方法是返回Handlebars.SafeString
而不是String
:
把手不会逃脱
Handlebars.SafeString
。如果您编写生成自己的HTML的帮助程序,通常需要返回new Handlebars.SafeString(result)
。
所以你在帮手中有这个:
return new Handlebars.SafeString(value + " " + symbol);