1

我正在使用 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"
  }
}
4

1 回答 1

1

这也发生在我身上,可能是与路由器中的序列化和反序列化有关的问题。当您反序列化 id 并且您获得 id 属性的未定义返回值时,诊所的数据尚未加载。解决方案是在每个状态的反序列化方法中实现承诺模式。

您可以查看以下链接以获取更多信息: https ://github.com/emberjs/ember.js/issues/1268#issuecomment-7893886 - 承诺模式的实现。

Emberjs 异步路由- 了解更多信息和另一种选择

于 2012-11-01T05:35:56.950 回答