2016-06-18 6 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 yes – 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') 

EDIT

Вы можете использовать уголек вычисленную карту на этом свойстве для тонкой настройки массива если необходимо, например,

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

Спасибо, но это вернет массив объектов, мне нужно вернуть массив строк (например, ['done', 'waiting']) Также я не думаю, что проблема вычисляется ember, это может быть способ Я читаю модель? Если это коллекция билетов, то я уверен, что я должен был бы называть Ember.Enumerable методы на нем, но, похоже, это не так. – a7omiton

+0

Почему бы не создать другое вычислимое свойство, зависящее от статусов и использование функции карты? поэтому statusesAsStrings: Ember.computed ('statuses', function() .... и т. д. здесь вам не нужно их фильтровать, так как они уже были профинансированы с уникальными статусами –

+0

Потому что мне не нужно: P – a7omiton