小胡子JS和单数/复数

时间:2011-11-15 14:14:48

标签: mustache

我使用小胡子模板化我的javascript ajax调用,这是我的数据和模板:

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

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

它有效,但我想在此修复语法,如果超过1个人加入,我想显示5 people joined so far

如何在不操纵服务器端的情况下实现这一点ajax json responder?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

实际上你只能用Mustache来做,但是对于你的JSON不仅包含一个数字,还包含一个值数组,以及数组的大小:

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

为此,您可以使用以下Mustache模板之一:

在简单的情况下,当你只需要添加" 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/

P.S。如果我能找到这个解决方案,我会在这里再次发帖:

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