灰烬 - 自动重定向到firstObject

Chr*_*let 17 javascript ember.js ember-router

我想要一个Ember路径/clinic/1自动重定向以显示第一位医生:/clinic/1/doctor/1.

每个诊所都有很多医生.

不幸的是,如果我使用此代码:

var doctor = clinicController.get('content.doctors.firstObject');
router.transitionTo('clinic.doctor.index', doctor);
Run Code Online (Sandbox Code Playgroud)

......这是行不通的,因为content.doctors.length仍然是0当这个代码运行app_router.js.

有任何想法吗?

Yeh*_*atz 24

你应该能够做到这一点:

App.DoctorsRoute = Ember.Route.extend({
  model: function() {
    return App.Doctor.find();
  },

  redirect: function() {
    var doctor = this.modelFor('doctors').get('firstObject');
    this.transitionToRoute('doctor', doctor);
  }
});
Run Code Online (Sandbox Code Playgroud)

这将有效,因为:

  • 如果模型钩子返回尚未加载的对象,则在模型完全加载之前,其余钩子将不会运行.
  • 如果redirect挂钩转换到另一个路径,则其余挂钩将不会运行.

请注意,从2426cb9开始,您可以.index在转换时省略隐含.

  • 不开玩笑 - 男人自己!谢谢耶胡达:) (2认同)
  • 这不再适用了吗?当我尝试这个时,我在我的控制台中收到一条错误,说"未捕获的TypeError:无法调用方法'获取'未定义的'.出于某种原因,`this.modelFor('doctors')`返回undefined.似乎重定向钩子在模型加载完成之前被调用. (2认同)