是否有任何帮助使模板知道何时使用复数词?
在下面的示例中,如何使模板输出"2只狗......"?
代码:
Ember.View.create({dog_count: 2})
Run Code Online (Sandbox Code Playgroud)
模板:
{{dog_count}} (dog has)/(dogs have) gone for a walk.
Run Code Online (Sandbox Code Playgroud)
tom*_*yjr 14
我知道这已经过时了,但今天我需要它,所以这里有.
Ember.Handlebars.registerBoundHelper('pluralize', function(number, opts) {
var single = opts.hash['s'];
Ember.assert('pluralize requires a singular string (s)', single);
var plural = opts.hash['p'] || single + 's';
return (number == 1) ? single : plural;
});
Run Code Online (Sandbox Code Playgroud)
用法:
{{questions.length}} {{pluralize questions.length s="Question"}}
Run Code Online (Sandbox Code Playgroud)
要么
{{dog_count}} {{pluralize dog_count s="dog has" p="dogs have"}} gone for a walk.
Run Code Online (Sandbox Code Playgroud)
只有当您不需要标准+ s行为时,才需要复数(p =)选项.
pan*_*atz 10
Ember有一个I18n库:zendesk/ember-i18n.
有一个把手帮手t,通过查找以下字符串来处理国际化Em.I18n.translations:
Em.I18n.translations = {
'dog.walk.one': '1 dog has gone for a walk.',
'dog.walk.other': '{{count}} dogs have gone for a walk.'
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式在Handlebars模板中使用该字符串:
{{t dog.walk countBinding="dogCount"}}
Run Code Online (Sandbox Code Playgroud)
上面的代码未经测试,只是从README中的文档中获取.
我找到的另一个JS I18n库是Alex Sexton的messageformat.js.
这取决于你的应用程序的复杂性,但你也可以使用计算属性,请参阅http://jsfiddle.net/pangratz666/pzg4c/:
把手:
<script type="text/x-handlebars" data-template-name="dog" >
{{dogCountString}}
</script>?
Run Code Online (Sandbox Code Playgroud)
JavaScript:
Ember.View.create({
templateName: 'dog',
dogCountString: function() {
var dogCount = this.get('dogCount');
var dogCountStr = (dogCount === 1) ? 'dog has' : 'dogs have';
return '%@ %@ gone for a walk.'.fmt(dogCount, dogCountStr);
}.property('dogCount')
}).append();
Run Code Online (Sandbox Code Playgroud)
如果您使用Ember Data,则可以使用Ember.Inflector.
var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);
inflector.pluralize('person') //=> 'people'
Run Code Online (Sandbox Code Playgroud)
您可以注册一个新的帮助:
Handlebars.registerHelper('pluralize', function(number, single) {
if (number === 1) { return single; }
else {
var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);
return inflector.pluralize(single);
}
});
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请访问http://emberjs.com/api/data/classes/Ember.Inflector.html