2014-09-10 130 views
0

我有這樣灰燼嵌套的路線,並承諾

var fetchMessages = function(){$.getJSON(<some url>).then(function(data){ return data; }}; 

var messages = fecthMessages(); 

我的路線定義一個jquery Ajax調用是建立這樣

App.Router.map(function() { 

    this.resource('messages', function() { 
     this.resource('message', { path: ':message_id' });      
    });                   
    }); 

我使用的承諾messages在我的路線是這樣

App.MessagesRoute = Ember.Route.extend({ 
    model : function(){ 
     return messages; 
    } 
}); 

上述路線工作正常。

接下來我有一個嵌套的路線,如下所示。然而,當我直接嘗試訪問#/messages/<id of the message>時,這出錯了。加載#/messages,然後訪問#/messages/<id of message>工作正常。

App.MessageRoute = Ember.Route.extend({ 
    model: function(params) { 
     message = messages.findBy("id", params.message_id); 
     return message; 

    } 
    }); 

那麼如何處理嵌套路由中的承諾呢?

+2

'fetchMessages'不是函數,你不能執行它。 |所以,燼可以處理從'model()'返回的承諾? |在哪裏定義了「findBy」? – Bergi 2014-09-10 14:41:26

+0

對不起,編輯。 'fetchMessages'是一個函數。 'findBy'是一個Ember的東西。我將這些示例代碼作爲基礎 - https://github.com/tildeio/bloggr-client/blob/master/js/app.js – 2014-09-10 15:09:11

+0

「.then(function(data){return data;} ''是去掉'textStatus'和'jqXhr'的參數嗎? – Bergi 2014-09-10 15:24:31

回答

1

那麼如何處理嵌套路由中的承諾呢?

顯然Ember handles these for you

然而,這錯誤,當我直接嘗試訪問#/消息/:

App.MessageRoute = Ember.Route.extend({ 
    model: function(params) { 
     message = messages.findBy("id", params.message_id); 
     return message; 

    } 
    }); 

messages仍然是一個承諾,而不是一個數組;它沒有findBy方法。相反,使用

return messsages.then(function(m) { 
    return m.findBy("id", params.message_id); 
}); 
+0

謝謝!我仍然有這樣的問題,我的視圖依賴於這個promise/model並且使用'this .get('context')。model'在視圖呈現時是不確定的。任何想法如何使視圖與諾言一起工作? – 2014-09-11 06:42:18

+0

嗯,對不起,我沒有太多的Ember經驗。 – Bergi 2014-09-11 14:19:44