2012-07-18 105 views

回答

1

在將模型傳遞到鬍鬚(或任何模板引擎)之前,您應該這樣做。除了能夠進行字符串操作之外,問題是並非所有國家的數字格式都相同,因此顯示錶示可能有所不同,因此不應在模板中進行硬編碼。

+5

有些人會認爲數字是通用的,而iso格式是文化和演示文稿問題 – 2014-03-12 21:58:43

12

小鬍子很簡約,不提供任何支持。

你要麼必須提供的格式化數據或返回格式的數據

{ priceDecimal: function() { return formatDecimal(this.price); } } 

另一種替代方法是使用handlebars.js支持輔助功能

Handlebars.registerHelper('decimal', function(number) { 
    return formatDecimal(number); 
}); 

和使用它像這樣

的函數
{{decimal price}} 
+1

是的。 mustache.java的成員建議應該有一個額外的演示文稿/視圖模型。 http://www.javarants.com/2013/03/09/mustache-is-logic-less-but-the-logic-has-to-go-somewhere/ – 2013-05-13 08:26:36

7

雖然我同意Lucero's answer,可以使用function in 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> 

這裏的the working jsFiddle檢查和播放進一步。

0

我用的把手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