0

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

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 访问集合(在这种情况下,我不明白需要将模型传递给控制器​​)​​?

4

1 回答 1

1

Ember.computed.uniqBy

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

请为您的计算属性尝试此操作

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

编辑

如果需要,您可以在此属性上使用 ember 计算映射来微调您的数组,例如像这样

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()

希望能帮助到你

于 2016-06-18T17:15:23.313 回答