2011-11-15 34 views
9

我用鬍子的模板化我的JavaScript的Ajax調用,這是我的數據和模板:鬍子JS和單/複數

{'joined':1} // ajax responde data json. 

var myTemplate = '{{ joined }} person joined so far.' 

它的工作原理,但我想修補的語法在此,如果超過1人加入,我想顯示5 people joined so far

如何在不操縱服務器端ajax json responder的情況下實現這一目標?

回答

5

您可以添加條件邏輯的JavaScript對象內,如果你能哄你的服務器端AJAX到提供這樣的說法:

var json = { 
    'joined': 1, 
    'ppl': function() { 
     return (this.joined === 1) ? 'person' : 'people' 
    } 
} // ajax responde data json. 
var myTemplate = '{{ joined }} {{ppl}} joined so far.' 

Mustache.to_html(myTemplate, json); 

http://jsfiddle.net/mblase75/H8tqn/

+0

我從這個是公認的答案收集不存在任何方式鬍子本身要做到這一點,對不對?它處理真假虛假變量作爲條件,沒有其他比較? – enigment

0

其實你可以只用鬍子做,但對於情況下,你JSON不僅包含了一些,但值的數組,加上數組的大小:

var json = { 
    'rows': ['a','b','c'], 
    'numRows': function() { 
     return this.rows.length 
    } 
} // ajax response data json. 

爲了做到它,你可以使用下面的鬍子模板之一:

在簡單情況下,當你只需要添加「s」是複數:

var myTemplate = '{{ numRows }} link{{^rows}}s{{/rows}}{{#rows.1}}s{{/rows.1}} parsed so far.' 

結果:

0 links parsed so far. 
1 link parsed so far. 
2 links parsed so far. 

在一般情況下,當多個特殊(如人/人):

var myTemplate2 = '{{ numRows }} {{^rows}}people{{/rows}}{{#rows.0}}{{^rows.1}}person{{/rows.1}}{{/rows.0}}{{#rows.1}}people{{/rows.1}} joined so far.' 

結果:

0 people joined so far. 
1 person joined so far. 
2 people joined so far. 

您可以在這裏練習均應用於模板: http://jsfiddle.net/H8tqn/9/


附:我會後再次在這裏如果我能找到這個問題的解決:

No people joined so far. 
1 person joined so far. 
2 people joined so far.