访问控制器中的模型集合 - Ember2.5

时间:2016-06-18 16:55:02

标签: ember.js ember-model ember-controllers

在控制器上创建计算属性时尝试访问控制器模型时,出现以下错误:

model.uniqBy is not a function

app/controller/ticket.js

export default Ember.Controller.extend({
  statuses: Ember.computed('model', function() {
      var model = this.get('model');
      return model
              .uniqBy('status')
              .map(function(i) { return i.status; })
              .toArray();
  }),
});

我给控制器的模型是从this.store.findAll('ticket');返回的集合,但是尝试迭代它似乎导致了上述错误。给模型的集合不应该是Ember.Enumerable对象吗?我是否应该尝试通过DS.Store访问该集合(在这种情况下,我不明白是否需要将模型传递给控制器​​)​​?

1 个答案:

答案 0 :(得分:1)

Ember.computed.uniqBy

  

一个计算属性,它返回一个包含数组中所有唯一元素的新数组,其唯一性由特定键确定

请尝试使用此计算属性

statuses: Ember.computed.uniqBy('model', 'status')

修改

您可以在此属性上使用ember computed map来根据需要微调数组,例如像

status: Ember.computed.map('statuses', function(status, index)
  return status.toUpperCase() + '!';
})

另一种方法是计算属性使用动态聚合语法,如此处所述

https://guides.emberjs.com/v2.6.0/object-model/computed-properties-and-aggregate-data/

所以Ember.computed('model。@ each.status',function()

希望有所帮助