Lor*_*o B 1 html javascript handlebars.js
我创建了一个Handlebars帮助器,如下所示.
Handlebars.registerHelper("format_currency", function(value, currency){
var symbol = "";
if(currency === "EUR") symbol = "€";
else if ... // other code here
return value + " " + symbol;
});
Run Code Online (Sandbox Code Playgroud)
我以下面的方式使用
{{format_currency amount currency}}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序应用程序时,值字段具有正确的值(比如1.5),而对象中的货币散列哈希属性.为什么?在这里我会期待我通过的货币(比如说"EUR").
我错过了什么吗?谢谢.
我不知道是什么意思是"散列内的哈希属性的对象",但我看到一个问题,您的助手(或者你使用它的方式),这将使它产生奇怪的结果.
当您使用时{{...}},Handlebars期望纯文本,因此它将对HTML进行编码.因此,如果您的symbol最终结果是"€",&符号将被HTML编码,您将被€添加到您的模板而不是欧元符号的Unicode实体.
有几种方法可以解决这个问题.
解决编码问题的一种方法是在模板中使用三重状态来禁用HTML编码:
{{{format_currency amount currency}}}
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/Q4FcR/
另一种方法是放弃实体,转而使用原始的Unicode Euro字符:
if(currency === "EUR")
symbol = '€';
Run Code Online (Sandbox Code Playgroud)
然后你不必担心双重存储或三重stashes或HTML编码或...
演示:http://jsfiddle.net/ambiguous/Mfuk7/
另一种方法是返回a Handlebars.SafeString而不是String:
把手不会逃脱
Handlebars.SafeString.如果你编写一个生成自己的HTML的帮助器,你通常会想要返回一个new Handlebars.SafeString(result).
所以你在你的助手中有这个:
return new Handlebars.SafeString(value + " " + symbol);
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/AZtCE/