2014-03-13 18 views
2

我有一個模型鉤/products如下:如何解決在Ember js中從STORE的find()方法獲得的ember promise數組的響應?

App.ProductsRoute = Ember.Route.extend({ 
    model: function(controller) { 
     return this.find.store('product'); 
    } 
}); 

這種運作良好,並獲取由RESTAdapter支持JSON約定的產品的清單,我可以使用顯示products模板列表{{} #each幫手。

但是,當我得到一些HTTP錯誤(比如說500內部服務器錯誤),應用程序中斷JSON.parse中的錯誤。我無法弄清楚如何在這裏使用onSuccess和onFail回調來正確解析promise(並有效地處理錯誤)。對此主題的任何幫助非常感謝。

我試過以下,但它不工作。即使服務器關閉,流量也不會達到onFail方法。

App.ProductsRoute = Ember.Route.extend({ 
    model: function(controller) { 
     var onSuccess = function(products) { 
      return products; 
     }; 
     var onFail = function(reason) { 
      alert('Error occured !'); 
      return []; 
     }; 

     return this.find.store('product').then(onSuccess, onFail); 
    } 
}); 

回答

2

您可以添加一個簡單的。然後在第一個回調的onSuccess本質,第二是onFail

App.ProductsRoute = Ember.Route.extend({ 
    model: function(controller) { 
     return this.store.find('product').then(function(response) { 
      alert('working!'); //(you can return the models here if all is good) 
     }, function() { 
      alert('broken!'); 
     }); 
    } 
}); 
+0

非常感謝您的回覆@ToranBillups。你能否看看最新的問題,看看我是否錯過了一些重要的東西?謝謝。 – Sangram

+0

我從一個正在運行的應用程序中複製了這個,我驗證了這個錯誤。我使用最新的ember-data master和ember.js 1.4(stable)。你準確的設置是什麼?你看到xhr在chrome開發工具中失敗了,以證明它「應該」失敗(放入第二個函數)? –

+0

謝謝你的回覆。我完全按照你所說的做了,現在我能夠進入第一個回調。但是當它失敗時,它永遠不會去第二個,但給我一個錯誤。可能是我需要解析我的迴應成功回調本身。讓我再次檢查一次,然後回到你身邊。讓我知道你是否可以幫我解決這個問題。謝謝。 – Sangram

1

我想你應該告訴過渡中止,因爲模型鉤大概需要一個真正的要返回的對象。

要做到這一點,請使用模型鉤子的第二個參數(它是過渡對象)。

相關問題