【问题标题】:Ember Action - {{action showClinic clinic}} generates link with 'undefined'Ember Action - {{action showClinic Clinic}} 生成带有“未定义”的链接
【发布时间】:2012-10-30 20:14:35
【问题描述】:

我正在使用 Ember、Ember-data 和 Rails。

当我在车把视图中创建链接时,它会链接到 /clinic/undefined。我试图让查看代码创建一个看起来像: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"
  }
}

【问题讨论】:

  • 如果您在模板中尝试,是否已定义 {{content.clinic}}?
  • 是的。如果我插入{{content.clinic}},我会得到&lt;App.Clinic:ember425&gt;,而{{content.clinic.name}} 会按预期给出Smallville Clinic
  • 对不起,如果这听起来很痛苦,但你能把它扔进 jsFiddle 吗?我以前曾多次遇到完全相同的问题,而且在我真正改变事情并看看会发生什么之前,它的根源通常并不明显。我有一些直觉想测试一下。

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


【解决方案1】:

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

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

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

【讨论】:

  • 就是这样。我必须创建一个有两个孩子的诊所路线:索引和医生。我只将“诊所”连接到 applicationController 一次(在父路由中),然后将“医生”连接到子路由中的诊所控制器。我只需要使路由以与对象关系级联相同的方式级联。谢谢!
猜你喜欢
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2018-08-12
  • 2018-03-15
  • 2021-07-08
  • 1970-01-01
相关资源
最近更新 更多