gpt4 book ai didi

javascript - Handlebars 助手无法正常工作

转载 作者:行者123 更新时间:2023-11-28 04:58:21 26 4
gpt4 key购买 nike

我创建了一个如下所示的 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”)。

我错过了什么吗?谢谢。

最佳答案

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

当您使用 {{...}} 时,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/

安全字符串

另一种方法是返回 Handlebars.SafeString而不是 String:

Handlebars will not escape a Handlebars.SafeString. If you write a helper that generates its own HTML, you will usually want to return a new Handlebars.SafeString(result).

所以你会在你的助手中有这个:

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

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

关于javascript - Handlebars 助手无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19316597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com