2012-08-28 68 views
5

我试图设置一个mustache.js模板,它将数字格式化为使用lambda的特定小数位,并且遇到问题。给定一个对象,看起来像:Mustache.js lambdas和数字格式化为固定

{ 
    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}}"; 

这不起作用(生成一个空的空间,其中数字应该是我,虽然。也许拉姆达是不是在正确的格式,因为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 F。联合到:

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

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

回答

10

试试这样:http://jsfiddle.net/QXFY4/10/

我完成你的部分:{{/points}}

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

这个增加对应于Lambda表达式部分的示例功能toFixed,我能通过解析浮点数并调用toFixed来更改{{y}}的渲染。

+0

不错的答案,我正在为此而努力,而且你比我写的更好。 – gonchuki

+0

不错。我也达成了同样的结论(但不想成为那个回答他自己的问题的人)。谢谢! – roto

+0

固定破碎的小提琴链接。 – SgtPooki