Como carregar os relacionamentos belongsTo / hasMany na rota com o EmberJS
No meu aplicativo EmberJS, estou exibindo uma lista de Compromissos. Em uma ação no AppointmentController, preciso obter o proprietário dos compromissos, mas o proprietário sempre retorna "indefinido".
Meus arquivos:
models / compromisso.js
import DS from 'ember-data';
export default DS.Model.extend({
appointmentStatus: DS.attr('number'),
owner: DS.hasMany('person'),
date: DS.attr('Date')
});
models / person.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string')
});
templates / compromissolist.js
{{#each appointment in controller}}
<div>
{{appointment.date}} <button type="button" {{action 'doIt'}}>Do something!</button>
</div>
{{/each }}
controllers / meetinglist.js
export default Ember.ArrayController.extend({
itemController: 'appointment'
});
controllers / compromisso.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
}
}
});
Agora, eu sei que posso mudar a propriedade do proprietário paraowner: DS.hasMany('person', {async: true})
e lide com a promessa retornada deappointment.get('owner');
, mas não é isso que eu quero. Eu descobri que se eu fizer isso{{appointment.owner}}
ou isto{{appointment.owner.name}}
no modelo da lista de compromissos, o registro do proprietário é buscado no servidor. Então, acho que o Ember não carrega relacionamentos, a menos que sejam usados no modelo.
Acho que a solução para o meu problema é usar a rota de listas de compromissos para buscar o registro no relacionamento belongsTo. Mas não consigo descobrir como.
Talvez algo assim?
rotas / compromissolist.js
export default Ember.Route.extend({
model: function() {
return this.store.find('appointment');
},
afterModel: function(appointments){
//what to do
}
});
EDITAR
Eu fiz isso:
rotas / compromissolist.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')
});
}
});
e funciona, mas eu não gosto da solução ...