2013-10-11 162 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

你做了一個控制檯嗎?記錄(參數)'在你的助手中,看看真正被傳遞的是什麼?你使用舊版的把手嗎?你和我的小提琴有什麼不同? –