我有一个名为players
的模型属性,它是一个由ember-data存储返回的记录数组。我想访问视图中的一个项目,而不需要迭代它。我知道,如果我需要第一个Ember.Enumerable
,我可以使用firstObject
方法:
{{ players.firstObject.name }}
但是对于其他指数来说,事情变得棘手:
{{ players.[1].name }} // does not work for Ember records
因为把手符号players.[1].name
不适用于记录数组。但它适用于本机JS数组。因此,一种解决方案是覆盖控制器上的属性,如下所示:
players: (function() {
return this.get('model.players').toArray();
}).property('players'),
另一种方法是制作一个Handlebars助手。但我的问题是(最后):为什么它默认不起作用?我不应该将它转换为数组吗?是否有方法可以混合到记录数组中,以便它可以在把手中按预期工作?
答案 0 :(得分:0)
您很少需要访问数组中不是第一个或最后一个的项目,如果您这样做,那么您通常会对索引n处的项目有所了解。如果是,则创建一个计算属性以返回该对象。它也提高了可维护性。
coolPlayer: function(){
return this.get('players').objectAt(1);
}.property('players.[]')
然后在模板中使用coolPlayer
{{coolPlayer.name}}
答案 1 :(得分:0)
您通常应该通过路径获取项目某种方式的索引,如果不是通过与另一个模型或参数关联,则通过基于来自路线的参数进行过滤。否则,选择项目所需的数据应该来自某个控制器(或者更不可能是视图等)。
之后,您可以根据应用中的变量显示列表(每个)或单个项目,这两个项目都是计算属性。
把手是无逻辑的。
但是,要选择特定索引处的项目,请使用.objectAt(index)
。只是不在模板中。