jquery - 用于格式号的 Mustache.js 函数
问题描述
我正在尝试在我的 jquery 代码中使用 mustache.js。
不幸的是,我在用函数格式化数值时遇到了问题。
var data = {
"price": 12000.00,
"format": function () {
return function (text, render) {
return Number( render(text) ).toLocaleString( "it-IT", { maximumFractionDigits: 2 } ) + ' €';
}
}
}
var template = "{{#format}}Formatted price : {{price}} {{/format}}";
var text = Mustache.render(template, data);
//output --> NaN €
我尝试使用 parseInt 而不是 Number 但结果相同。
我怎么能这样做?谢谢
解决方案
胡子不是为这些事情而设计的,因为它的目的是没有逻辑的。它确实支持自定义功能,但不会很优雅。在 Mustache 中,您需要在将数据传递给渲染器之前进行所有格式化。
像这样的 Mustache 模板的过程{{#format}}{{price}}{{/format}}
是:
format
被调用时,它将原始文本 ('{{price}}'
) 作为参数 #1 和一个特殊render()
函数作为参数 #2。- 你打电话
render(text)
(这导致任何{{price}}
评估) - 您对此结果进行修改并将其返回。
这意味着您的模型中有一个数字。render(text)
把它变成一个字符串。然后,您必须再次将该字符串解析回一个数字并根据您的语言环境重新格式化。这是一种非常迂回的方式,如果您预先格式化数字并且不要尝试将其硬塞到 Mustache 中,它真的会容易得多。
对于后代,这是使用 Mustache 的外观:
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>
推荐阅读
- gradle - 如何定义从 gradle 文件中的 azure 工件下载的依赖项?
- bash - 访问文本文件中的特定行
- python - 如何从 Azure Functions 中的存储容器读取多个文件
- jenkins - Jenkins 并行作业 - 如果至少有一个成功(如 successFast)触发另一个作业 - 不要等待所有作业的结果
- javascript - 单击显示和隐藏搜索框
- ruby-on-rails - Sidekiq 对不同的工作使用相同的工作 ID
- wildfly-11 - 在 Wildfly AS 中实现用户锁定功能
- python - 如何使用与上述函数中相同的 Word?如果没有办法做到这一点,我如何在不使用全局变量的情况下使用相同的随机数?
- c# - 如何将 x-ms-blob-type 标头添加到 DataLakeFileSystemClient?
- javascript - 如何将 body.addClass("className") 从父文档应用到 iframe