17

/clinic/1Ember パスが自動的にリダイレクトされて最初の医者が表示されるようにしたい: /clinic/1/doctor/1.

各クリニックには多くの医師がいます。

残念ながら、このコードを使用すると:

var doctor = clinicController.get('content.doctors.firstObject');
router.transitionTo('clinic.doctor.index', doctor);

...このコードが で実行される場合content.doctors.lengthと同様に、機能しません。0app_router.js

何か案は?

4

4 に答える 4

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);
  }
});

これは次の理由で機能します:

  • モデルフックがまだロードされていないオブジェクトを返す場合、モデルが完全にロードされるまで、残りのフックは実行されません。
  • フックが別のルートに移行した場合redirect、残りのフックは実行されません。

2426cb9の時点では、遷移時に暗黙を省略できることに注意してください.index

于 2013-01-13T18:36:31.810 に答える
1

更新として、ネストされたルートがあるためにリダイレクトしたくない場合は、意図したルートに基づいて条件付きリダイレクトを使用することをお勧めします。

redirectモデルと遷移オブジェクトの 2 つの引数が渡されます。トランジションには、targetNameその値に基づいて条件付きでリダイレクトできるプロパティがあります。

redirect: function(model, transition){
  if(transition.targetName ==='doctors.index'){
    this.transitionTo('doctor', model.get('firstObject'));
  }
}
于 2014-03-21T23:39:37.323 に答える