Как загрузить отношения ToT / hasMany в маршруте с EmberJS
В моем приложении EmberJS я показываю список встреч. В действии в AppointmentController мне нужно получить владельца назначений, но владелец всегда возвращает «undefined».
Мои файлы:
Модели / appointment.js
import DS from 'ember-data';
export default DS.Model.extend({
appointmentStatus: DS.attr('number'),
owner: DS.hasMany('person'),
date: DS.attr('Date')
});
Модели / person.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string')
});
шаблоны / appointmentlist.js
{{#each appointment in controller}}
<div>
{{appointment.date}} <button type="button" {{action 'doIt'}}>Do something!</button>
</div>
{{/each }}
Контроллеры / appointmentlist.js
export default Ember.ArrayController.extend({
itemController: 'appointment'
});
Контроллеры / appointment.js
export default Ember.ObjectController.extend({
actions:{
doIt: function(){
var appointment = this.get('model');
var owner = appointment.get('owner'); //returns undefined
//Do something with owner
}
}
});
Теперь я знаю, что могу поменять владельца наowner: DS.hasMany('person', {async: true})
, а затем обработать обещание, возвращенное изappointment.get('owner');
, но это не то, что я хочу. Я обнаружил, что если я сделаю это{{appointment.owner}}
или это{{appointment.owner.name}}
в шаблоне списка встреч запись о владельце извлекается с сервера. Так что я думаю, что Ember не загружает отношения, если они не используются в шаблоне.
Я думаю, что решение моей проблемы состоит в том, чтобы использовать маршрут списка назначений для извлечения записи в отношении принадлежащих. Но я не могу понять, как.
Может как то так?
маршруты / appointmentlist.js
export default Ember.Route.extend({
model: function() {
return this.store.find('appointment');
},
afterModel: function(appointments){
//what to do
}
});
РЕДАКТИРОВАТЬ
Я сделал это:
маршруты / appointmentlist.js
export default Ember.Route.extend({
model: function() {
return this.store.find('appointment');
},
afterModel: function(appointments){
$.each(appointments.content, function(i, appointment){
var owner= appointment.get('owner')
});
}
});
и это работает, но мне не нравится решение ...