Я использую усы для рендеринга json-данных, полученных через Ajax.
Я хочу отобразить это число в формате валюты:
{{price}}
например: 12300
Как я могу сделать это как:
"12,300"
с использованием механизма моделирования усов?
Я использую усы для рендеринга json-данных, полученных через Ajax.
Я хочу отобразить это число в формате валюты:
{{price}}
например: 12300
Как я могу сделать это как:
"12,300"
с использованием механизма моделирования усов?
Усы очень минималистичны и не поддерживают никакой поддержки.
Вам либо нужно предоставить отформатированные данные, либо функцию, возвращающую отформатированные данные
{ priceDecimal: function () { return formatDecimal(this.price); } }
Другой альтернативой является использование handlebars.js, который поддерживает вспомогательные функции
Handlebars.registerHelper('decimal', function(number) {
return formatDecimal(number);
});
и используйте его так:
{{decimal price}}
Пока я согласен с ответом Lucero, можно использовать функцию в Mustache для форматирования ваших данных.
Простой шаблон:
<ul>
{{#price}}
<li>{{commaFormat}}</li>
{{/price}}
</ul>
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);
Результат HTML:
<ul>
<li>1,234</li>
<li>123</li>
<li>123,456</li>
<li>1,234,567,890</li>
</ul>
Здесь рабочий jsFiddle для дальнейшего просмотра и воспроизведения.
Я создал небольшое расширение для Mustache.js, которое позволяет использовать formatters внутри выражений, например {{expression | форматировщик}}
Вы можете проверить это в github: http://jvitela.github.io/mustache-wax/
Вы должны сделать это, прежде чем передавать свою модель на усы (или на любой механизм шаблонов). Помимо возможности выполнить операцию stringd, проблема заключается в том, что не все страны форматируют номера одинаково, так что отображаемое представление может отличаться и не должно быть жестко закодировано в шаблоне.
Я использую пакет Handelbars NumeralHelper из https://www.npmjs.com/package/handlebars.numeral
Сначала установите (и, возможно, сохраните его на свой пакет .json):
npm install --save handlebars.numeral
Затем загрузите помощника:
var Handlebars = require('handlebars');
var NumeralHelper = require("handlebars.numeral");
NumeralHelper.registerHelpers(Handlebars);
Наконец, используйте его на своей странице:
<script>
myNumber = 12300:
</script>
<div>
{{ number myNumber }}
</div>
Вывод для этого примера - 12,300
.