如何在胡子中格式化十进制到货币格式?

bra*_*ter 13 javascript mustache

我正在使用小胡子来渲染通过Ajax接收的json数据.

我想以货币格式呈现此数字:

{{price}}

例如:12300

我怎样才能将其渲染为:

"12,300"

使用胡子模板引擎?

Ott*_*ger 15

胡子非常简约,不提供任何支持.

您必须提供格式化数据或返回格式化数据的函数

{ priceDecimal: function () { return formatDecimal(this.price); } }
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用支持辅助函数的handlebars.js

Handlebars.registerHelper('decimal', function(number) {
  return formatDecimal(number);
});
Run Code Online (Sandbox Code Playgroud)

并像这样使用它

{{decimal price}}
Run Code Online (Sandbox Code Playgroud)


max*_*tty 8

虽然我同意Lucero的回答,但可以使用Mustache中函数来格式化数据.

简单模板:

<ul>
    {{#price}}
        <li>{{commaFormat}}</li>
    {{/price}}
</ul>
Run Code Online (Sandbox Code Playgroud)

使用格式化函数处理数据的JavaScript:

var tpl = $('#tpl').html(),
    data = {
        price: ['1234', '123', '123456', '1234567890'],
        commaFormat: function() {
            // adapted from https://stackoverflow.com/questions/2901102/how-to-print-number-with-commas-as-thousands-separators-in-javascript
            return this.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
        }
    },
    html = Mustache.to_html(tpl, data);

document.write(html);?
Run Code Online (Sandbox Code Playgroud)

产生的HTML:

<ul>
    <li>1,234</li>
    <li>123</li>
    <li>123,456</li>
    <li>1,234,567,890</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这是工作jsFiddle进一步检查和玩耍.


JVi*_*ela 7

我为Mustache.js创建了一个小扩展,它允许在表达式中使用格式化程序,如{{expression | 格式}}

你可以在github上查看:http://jvitela.github.io/mustache-wax/


Luc*_*ero 1

您应该在将模型传递到 Mustache(或任何模板引擎)之前执行此操作。除了能够进行字符串操作之外,问题在于并非所有国家/地区的数字格式都相同,因此显示表示形式可能有所不同,并且不应在模板中进行硬编码。

  • 有些人会认为数字是通用的,而 ISO 格式是文化和演示问题 (5认同)