Ember Action - {{action showClinic clinic}}生成'undefined'的链接

时间:2012-10-30 20:14:35

标签: javascript ruby-on-rails-3 ember.js

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

1 个答案:

答案 0 :(得分:1)

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

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

Emberjs async routing - 了解更多信息和另一种选择