2013-03-14 77 views
5

我想重定向到ArrayController中的第一項。我發現了一些與此相關的其他問題,但沒有一個似乎有效的答案(許多變化已經發生,所以這是可以理解的)。從胡達here重定向到ArrayController中的第一項

一個特定的答案:

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 here

+0

我有相同的問題。它似乎也不適用於我。 – Ben 2013-04-29 03:43:22

回答

1

這裏的問題是您的模型列表尚未從服務器加載。根據你的需要,我會建議使用promis讓路由器等待升級,直到你的模型被加載。

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

ofcourse .. 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); 
     }); 
    } 
}); 
+0

我試過下面這個例子,但是我得到的列表長度爲0,所以firstObject是未定義的。任何工作?提前致謝! – wen 2013-06-12 17:48:47

+0

好吧,我想你的名單是空的。我建議你總是可以重定向到另一條路線..我會放在那裏。 (只是一個理想的..讓我知道,如果它不起作用) – Bram 2013-06-13 18:55:50

+0

我很確定我從服務器得到的結果,但在列表可用之前,「return list.get('firstObject')行仍然被觸發。 – wen 2013-06-17 17:23:29