Mustache.js lambdas和数字格式化为固定

时间:2012-08-28 14:44:30

标签: javascript lambda mustache tofixed

我正在尝试设置一个mustache.js模板,该模板使用lambda将数字格式化为特定的小数位,我遇到了问题。给定一个看起来像的对象:

{
     x: 123,
     points: [
          { name: "foo", y: 1.234567 },
          { name: "bar", y: 2.123456 },
          { name: "fax", y: 3.623415 }
     ]
}

首先,我尝试设置一个看起来像的模板:

var template = "{{x}}{{#points}}<br/>{{name}}, {{#y.toFixed}}2{{/y.toFixed}}";

这不起作用(生成一个空格,数字应该是。我可能lambda的格式不正确,因为toFixed不会返回一个函数(mustache docs)。所以我试过:

Number.prototype.toMustacheFixed = function(){
     var n = this;
     return function(d){ return n.toFixed(d); };
};
var template = "{{x}}{{#points}}<br/>{{name}}, {{#y.toMustacheFixed}}2{{/y.toMustacheFixed}}"

再次,失败。我甚至尝试将toMustacheFixed函数简化为:

Number.prototype.toMustacheFixed = function(){
     return function(){ return 123.45; };
};

这没有帮助。模板中我还是一片空白。那么,Mustache.js可以不处理数字上的原生函数和原型函数,还是我做错了什么?

1 个答案:

答案 0 :(得分:10)

以这种方式试试:http://jsfiddle.net/QXFY4/10/

我完成了您的部分:{{/points}}

我在http://mustache.github.com/mustache.5.html

的Lambdas部分添加了与示例相对应的函数toFixed

通过这个,我能够通过解析浮点数并在其上调用toFixed来改变{{y}}的渲染。