2016-06-18 28 views
0

當試圖創建控制器上的計算性能,當訪問控制器的型號,我得到以下錯誤:訪問控制器中的模型集合 - Ember2.5

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訪問集合(在這種情況下,我不明白需要將模型傳遞給控制器​​)​​?

+0

你想得到什麼?存儲在票據集合中的狀態字段的唯一值的數組? –

+0

@MirzaMemic是 – a7omiton

+0

你應該使用2.7以前的版本,在ember 2.7中引入了uniqBy宏。 http://emberjs.com/blog/2016/06/08/ember-2-6-and-2-7-beta-released.html – kumkanillam

回答

1

Ember.computed.uniqBy

A computed property which returns a new array with all the unique elements from an array, with uniqueness determined by specific key

請試試這個,而不是你的計算機財產

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

編輯

您可以在此屬性微調您的陣列使用灰燼計算地圖如果需要,例如像這樣

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( '模式。@ each.status',()的函數

希望它可以幫助

+0

謝謝,但這將返回一個對象數組,我需要返回一個字符串數組(例如['完成','等待']) 另外我不認爲這個問題是燼計算,它可能是這樣我正在閱讀模型?如果它是一個票的集合,那麼我相信我應該能夠調用Ember.Enumerable方法,但它似乎並非如此 – a7omiton

+0

爲什麼不創建另一個取決於狀態和使用映射函數的計算屬性?所以statusesAsStrings:Ember.computed('狀態',功能()....等在這裏你不需要過濾它們,因爲他們已經被篡改了獨特的狀態 –

+0

因爲我不應該:P – a7omiton