Ember: невозможно получить доступ к данным модели в контроллере/шаблоне

Я новичок в среде ember, и у меня есть проблемы или сомнения в доступе к ember-data. Я использую ember-cli и ember-cli-mirage для демонстрационных целей.

config.js

export default function() {
this.get('/newcontracts', function(db, request) {

 return {
   data:[{
     "type": "newcontracts",
     "id": 1,
     "attributes": {
         "department-type": ["Legal", "Sales"],
         "agreement-type": ["Service Agreement", "Purchase"],
         "renewal-type": ["One time", "None"]
     }
  }]
 }
});

Магазин Ember

export default Model.extend({
   "type": "",
   "department-type": attr(""),
   "agreement-type": attr(""),
   "renewal-type": attr("")
});

Маршрутизатор

export default Ember.Route.extend({
     model: function(){
        console.log(this.get('store').findAll('newcontract')) // outputs ember class
        return this.get('store').findAll('newcontract');
     });

Контроллер

 export default Ember.Controller.extend({
  details: Ember.computed('model', function() {
   return this.store.peekRecord('new-contract', 1) // --> outputs ember class
    //console.log(this.store.peekRecord('new-contract', 1).get('department-type)) ---> desired output(array)
  })
  departmentDetails: Ember.computed('model', function() {
    this.details.get('department-type') ; ///error
  })

});

Шаблон

{{log "model" details}} --> ember class
{{log "model" model}} --> ember class
{{log "model" model.department-type}} --> undefined

Могу ли я получить доступ к таким сведениям о отделе? Я получаю нужные данные, если использую закомментированную строку в свойстве details. Должен ли я получать все данные отдельно из магазина? Кроме того, регистрация значения в модели дает класс Ember.

Даже в файле шаблона я не могу получить значение model.department-type и т.д.

Я правильно получаю данные в инспекторе хрома Ember. К вашему сведению, я использую Ember 2.5.1. Пожалуйста, помогите мне в этом.


person Mohanesh    schedule 15.07.2016    source источник
comment
Изучите вашу модель, в чем заключается идея наличия поля типа. Вы используете адаптер JsonApi, верно? Также ваши свойства представляют собой массивы, Legal..Sales... Хотите ли вы потреблять, например, массив. Я могу дать несколько советов, но не уверен, как вы хотите использовать тип отдела... внутри выбора?   -  person Mirza Memic    schedule 15.07.2016
comment
Если вы не хотите указывать преобразование, вы должны использовать atr(), а не attr(""). Вам также нужно сделать this.get('details') в departementDetails.   -  person locks    schedule 15.07.2016
comment
И модель, и детали являются перечисляемыми элементами, поэтому вы можете перечислить их, чтобы получить данные. 37408910" title="получить данные из магазина emberjs найти"> stackoverflow.com/questions/37380384/   -  person Ember Freak    schedule 15.07.2016


Ответы (1)


this.get('store').findAll('newcontract'); дает вам массив newcontract.

Регистрация model[0].department-type в шаблоне приведет к печати файла department-type.

Чтобы ответить на ваш вопрос, вы нигде не обращаетесь к departmentDetails, вместо этого вы создаете его в контроллере.

Кроме того, вы не можете получить прямой доступ к вычисляемому свойству, такому как details, вы всегда должны использовать get(). Так что this.get('details').get('department-type') не this.details.get('department-type')

person mangatinanda    schedule 15.07.2016