2011-11-15 10 views
9

Io uso i baffi per modellare i miei JavaScript chiama Ajax, Ecco i miei dati e il modello:Baffi JS e singolare/plurale

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

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

Funziona, però voglio fissare la grammatica in questo, se più di 1 persona si unisce, voglio mostrare 5 people joined so far.

Come ottenere questo risultato senza modificare il lato server ajax json responder?

risposta

5

È possibile aggiungere logica condizionale all'interno dell'oggetto JavaScript, se si può convincere il vostro AJAX lato server in consegna in questo modo:

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

Ho raccolto da questa risposta accettata che non c'è alcun modo per farlo nei baffi in sé, giusto? Gestisce vars falsi veri come condizionali, nessun altro paragone? – enigment

0

In realtà lo si può fare solo con Baffo, ma per il caso in cui il JSON contiene non solo un numero, ma una matrice di valori, insieme con la dimensione della matrice:

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

per fare esso, è possibile utilizzare uno dei seguenti modelli di Moustache:

Nel caso semplice, quando hai solo bisogno di aggiungere "s" per il plurale:

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

Il risultato:

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

Nel caso generale, quando il plurale è speciale (come 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.' 

Il risultato:

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

Potete trovare entrambi i modelli applicati nella pratica qui: http://jsfiddle.net/H8tqn/9/


P.S. Inserirò di nuovo qui se riesco a trovare la soluzione per questo:

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