Усы не созданы для такого рода вещей, потому что они предназначены для без логики.Он поддерживает пользовательские функции, но не будет очень элегантным.В Mustache ожидается, что вы выполняете все форматирование до и передаете данные в средство визуализации.
Процесс для шаблона Mustache, подобного этому {{#format}}{{price}}{{/format}}
, следующий:
- * вызывается 1009 *, он получает необработанный текст (
'{{price}}'
) в качестве аргумента # 1 и специальную функцию render()
в качестве аргумента # 2. - Вы вызываете
render(text)
(это приводит к тому, что{{price}}
оценивает как) - Вы вносите изменения в этот результат и возвращаете его.
Это означает, что в вашей модели есть число.render(text)
превращает его в строку.Затем вам нужно снова разобрать эту строку в число и переформатировать ее в соответствии с вашей локалью.Это очень окольный способ сделать это, будет намного проще, если вы отформатируете число заранее и не пытаетесь подковать это в Усы.
Для потомков, вот как это будет выглядеть при использовании Усов:
var data = {
price: 12000.5,
format: function () {
return function (text, render) {
var result = render(text);
return parseFloat(result).toLocaleString("it-IT", {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
}
}
var template = "Formatted price: {{#format}}{{price}}{{/format}} €";
var result = Mustache.render(template, data);
document.querySelector("#output").textContent = result;
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/3.0.1/mustache.min.js"></script>
<div id="output"></div>