我使用小胡子模板化我的javascript ajax调用,这是我的数据和模板:
{'joined':1} // ajax responde data json.
var myTemplate = '{{ joined }} person joined so far.'
它有效,但我想在此修复语法,如果超过1个人加入,我想显示5 people joined so far
。
如何在不操纵服务器端的情况下实现这一点ajax json responder?
答案 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);
答案 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.