2013-10-11 119 views
1

我已经创建了如下所示的扶手助手。扶手助手不能正常工作

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),而在对象的货币该散列的散列属性内。为什么?在这里,我希望我通过的货币(比如说“欧元”)。

我错过了什么吗?谢谢。

回答

5

我不知道“散列哈希属性的对象”是什么意思,但我看到一个问题与你的助手(或你使用它的方式),这将使它产生奇怪的结果。

当您使用{{...}}时,Handlebars期待纯文本,因此它将对HTML进行编码。因此,如果您的symbol最终为"€",则&符号将为HTML编码,您将获得€添加到您的模板,而不是欧元符号的Unicode实体。

有几种解决此问题的方法。

三重藏匿

解决编码问题,请使用三藏匿在模板中禁用HTML编码

方式一:

{{{format_currency amount currency}}} 

演示:http://jsfiddle.net/ambiguous/Q4FcR/

平原的Unicode

另一种方法是放弃实体以支持原始的Unicode欧元字符:

if(currency === "EUR") 
    symbol = '€'; 

那么你不必担心双储物箱或三藏匿或HTML编码或...

演示:http://jsfiddle.net/ambiguous/Mfuk7/

SafeString

另一种方法是返回的Handlebars.SafeString代替String

把手不会逃脱Handlebars.SafeString。如果你编写一个帮助程序来生成自己的HTML,你通常会返回一个new Handlebars.SafeString(result)

所以,你已经有了这个放在你的助手:

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

演示:http://jsfiddle.net/ambiguous/AZtCE/

+0

感谢。 +1您的支持。用这句话我的意思是币值不能正确读取。值正确导出时,货币不会导出到任何地方。把手作为第二个参数,在里面用散列创建空对象。有什么建议? –

+0

你做了一个控制台吗?记录(参数)'在你的助手中,看看真正被传递的是什么?你使用旧版的把手吗?你和我的小提琴有什么不同? –