Ember.js - 在Handlebars视图中访问记录数组的项目

时间:2014-06-04 15:47:13

标签: ember.js handlebars.js

我有一个名为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助手。但我的问题是(最后):为什么它默认不起作用?我不应该将它转换为数组吗?是否有方法可以混合到记录数组中,以便它可以在把手中按预期工作?

2 个答案:

答案 0 :(得分:0)

您很少需要访问数组中不是第一个或最后一个的项目,如果您这样做,那么您通常会对索引n处的项目有所了解。如果是,则创建一个计算属性以返回该对象。它也提高了可维护性。

coolPlayer: function(){
  return this.get('players').objectAt(1);
}.property('players.[]')

然后在模板中使用coolPlayer

{{coolPlayer.name}}

答案 1 :(得分:0)

您通常应该通过路径获取项目某种方式的索引,如果不是通过与另一个模型或参数关联,则通过基于来自路线的参数进行过滤。否则,选择项目所需的数据应该来自某个控制器(或者更不可能是视图等)。

之后,您可以根据应用中的变量显示列表(每个)或单个项目,这两个项目都是计算属性。

把手是无逻辑的。

但是,要选择特定索引处的项目,请使用.objectAt(index)。只是不在模板中。