5

ArrayController の最初の項目にリダイレクトしようとしています。これに関連する他のいくつかの質問を見つけましたが、うまくいくと思われる回答はありませんでした (多くの変更が行われているので、これは理解できます)。

ここでYehudaからの特定の回答:

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

  redirect: function() {
    var doctor = this.modelFor('doctors').get('firstObject');
    this.transitionTo('doctor', doctor);
  }
});

私はこのシナリオを再現したと「思います」が、何か間違ったことをしたに違いありません...

私が間違っていることについての洞察は大歓迎です。

JSBin の例はこちら

4

1 に答える 1

1

ここでの問題は、モデルのリストがまだサーバーからロードされていないことです。必要に応じて、プロミスを使用して、モデルがロードされるまで敗走を少し待つことをお勧めします。

App.DoctorsRoute = Ember.Route.extend({
  model: function() {
    return App.Doctor.find().then(function (list) {
       return list.get('firstObject');
    });
  },

  redirect: function() {
    var doctor = this.modelFor('doctors');
    this.transitionTo('doctor', doctor);
  }
});

もちろん..リダイレクトをばかげたものにするウェル。したがって、リストがロードされるのを待ちたいだけの場合は、

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

  redirect: function() {
    var self = this;
    this.modelFor('doctors').then(function (list) {
           return list.get('firstObject');
       }).then(function (doctor){
           if(!doctor)
              self.transitionTo('doctor', doctor);
       });
  }
});
于 2013-05-02T10:06:16.420 に答える