Javascript 车把辅助工具无法正常工作

Javascript 车把辅助工具无法正常工作,javascript,html,handlebars.js,Javascript,Html,Handlebars.js,我创建了一个如下所示的把手辅助对象 Handlebars.registerHelper("format_currency", function(value, currency){ var symbol = ""; if(currency === "EUR") symbol = "€"; else if ... // other code here return value + " " + symbol; }); 我用下面的方式 {{for

我创建了一个如下所示的把手辅助对象

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}}
当我运行应用程序时,value字段具有正确的值(比如1.5),而对象中的货币散列了其中的散列属性。为什么?在这里,我希望我传入的货币(比如“欧元”)

我错过什么了吗?谢谢。

我不知道“内部散列散列属性的对象”是什么意思,但我发现您的助手(或您使用它的方式)存在一个问题,这会使它产生奇怪的结果

当您使用
{…}
时,Handlebar需要纯文本,因此它将对其进行HTML编码。因此,如果您的
符号
最终为
“€;”
,则符号将采用HTML编码,您将获得
€已添加到模板中,而不是欧元符号的Unicode实体

有几种方法可以解决这个问题

三重储藏 解决编码问题的一种方法是在模板中使用三重隐藏来禁用HTML编码:

{{{format_currency amount currency}}}
演示:

纯Unicode 另一种方法是放弃实体而使用原始Unicode Euro字符:

if(currency === "EUR")
    symbol = '€';
那么你就不必担心双重隐藏、三重隐藏、HTML编码或

演示:

安全绳 另一种方法是返回一个而不是
字符串

车把不会从
车把安全字符串
中退出。如果您编写的帮助程序生成自己的HTML,通常需要返回一个
新的handlebar.SafeString(result)

因此,您的助手中包含以下内容:

return new Handlebars.SafeString(value + " " + symbol);

演示:

谢谢+1.感谢您的支持。这句话的意思是货币价值没有被正确解读。正确导出值时,不会将货币导出到任何位置。handlebar作为第二个参数,创建内部带有散列的空对象。有什么建议吗?您是否在助手中执行了
console.log(arguments)
以查看真正传递的内容?您使用的是旧版本的把手吗?你和我的小提琴有什么不同?