2011-11-15 9 views
9

utilizo el bigote para crear plantillas mis llamadas JavaScript ajax, aquí está mi datos y la plantilla:bigote JS y singular/plural

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

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

Funciona, sin embargo quiero fijar la gramática en esto, si hay más de 1 persona se une, quiero mostrar 5 people joined so far.

¿Cómo lograr esto sin manipular el lado del servidor ajax json respondedor?

Respuesta

5

Usted puede agregar lógica condicional dentro del objeto de JavaScript, si se puede convencer a su AJAX del lado del servidor en la entrega de esa manera:

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

que deduzco de esto es la respuesta aceptada que no hay ninguna manera de hacer esto en sí mismo bigote, ¿verdad? Maneja vars verdadero-falso como condicionales, no hay otras comparaciones? – enigment

0

En realidad, usted puede hacerlo sólo con bigote, pero para el caso de que su JSON contiene no sólo un número, pero una matriz de valores, junto con el tamaño de la matriz:

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

con el fin de hacer ella, puede utilizar una de las siguientes plantillas del bigote:

En el caso simple, cuando sólo tiene que añadir "s" para el plural:

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

El resultado:

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

En el caso general, cuando el plural es especial (como la gente/persona):

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

El resultado:

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

Puede encontrar ambas plantillas aplicadas en la práctica aquí: http://jsfiddle.net/H8tqn/9/


P. S. Voy a publicar de nuevo aquí si puedo encontrar la solución para éste:

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