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

这里的问题是您的模型列表尚未从服务器加载。根据您的需要,我建议您使用 Promis 让 rout 等到您的模型加载完毕。

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

当然.. wel 这会使重定向有点愚蠢,所以如果您只想等待列表加载,您可以尝试:

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 回答