我正在使用Ember,Ember-data和Rails。
当我在把手视图中创建链接时,它链接到/ clinic / undefined。我正在尝试让View代码创建一个类似于http://localhost:3000/#/clinic/1
的链接,但看起来像是:http://localhost:3000/#/clinic/undefined
。
任何想法为什么以及如何解决它?
查看:
<a {{action showClinic content.clinic href=true}}>Click here</a>
路由器:
root: Ember.Route.extend({
showClinic: Ember.Route.transitionTo('clinic'),
showDoctor: Ember.Route.transitionTo('doctor'),
index: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('main');
}
}),
clinic: Ember.Route.extend({
route: '/clinic/:clinic_id',
connectOutlets: function(router, clinic) {
router.get('applicationController').connectOutlet('clinic', clinic);
router.get('clinicController').connectOutlet('doctors', clinic.get('doctors'));
}
}),
doctor: Ember.Route.extend({
route: '/doctor/:doctor_id',
connectOutlets: function(router, doctor) {
router.get('applicationController').connectOutlet('doctor', doctor);
}
})
})
型号:
App.Doctor = DS.Model.extend({
name: DS.attr('string'),
clinic: DS.belongsTo('App.Clinic')
});
JSON:
{
doctor: {
id: 1,
clinic_id: 1,
name: "Dr. Who"
}
}
答案 0 :(得分:1)
这也发生在我身上,可能是与路由器中的序列化和反序列化有关的问题。 当您反序列化id时,尚未加载诊所的数据,并且您获得了id属性的undefined返回值。 解决方案是在每个状态的deserialize方法中实现promises模式。
您可以查看以下链接以获取更多信息: https://github.com/emberjs/ember.js/issues/1268#issuecomment-7893886 - 实施承诺模式。
Emberjs async routing - 了解更多信息和另一种选择