2015-02-07 79 views
3

我對於燼很新,但是我花了幾個小時處理這個問題,無法自行解決。這裏是我的路線(使用ember-cli):Ember:Promise(destroyRecord()。then())在成功請求時失敗

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    actions: { 
     save: function() { 
      var controller = this.controller; 
      controller.get('model').save().then(function(account) { 
       console.log('account saved'); 
       controller.transitionToRoute('accounts.index'); 
      }, function(response) { 
       console.log('account NOT saved'); 
      }); 

      return false; 
     }, 
     deleteAccount: function() { 
      var controller = this.controller; 
      controller.get('model').destroyRecord().then(function(account) { 
       console.log('account deleted'); 
       controller.transitionToRoute('accounts.index'); 
      }, function(response) { 
       console.log('account NOT deleted'); 
      }); 

      return false; 
     }, 
     cancel: function() { 
      this.controller.get('model').rollback(); 
      this.transitionToRoute('accounts.index'); 
      return false; 
     }, 
    } 
}); 

我觸發了我的模板(按鈕)中的deleteAccount操作。有趣的是,代碼實際上是刪除記錄。它發送一個成功的刪除請求,並且api刪除該賬戶。但它永遠不會過渡到accounts.index。相反,它會記錄「帳戶未刪除」。如果我手動去account.index然後模型不再有(如人們所期望的)。 我從官方的餘燼文檔中獲得了代碼。請參閱:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord

那麼,爲什麼當模型被實際刪除時,承諾總是失敗?您的幫助將非常感謝!

Btw .:它是一個以account_id作爲參數傳遞的編輯路由,因此不需要在路由上手動定義「模型函數」。以防萬一有人在想。

+0

嘿,DELETE'請求的迴應是什麼?也許它是一個成功的'200',但是這個迴應並不被燼理所理解? – andrusieczko 2015-02-08 01:21:27

+0

它是一個空的HTTP 200 OK。就我而言,這應該是對刪除請求的有效回覆。 – 2015-02-08 10:22:28

回答

7

我想我剛剛解決了它。 destroyRecord()承諾失敗的原因似乎是我的API以EMPTY HTTP 200響應迴應。但200通常意味着一個實體返回,而不是這種情況。所以我調整了API來返回一個空的204響應,這就做到了這一點。這SO其實答案幫助了很多:HTTP status code for update and delete?

一個成功的響應應該是200(OK)如果響應包含描述狀態的 實體,202(接受)如果動作尚未 頒佈,或204(無內容)如果已採取行動但 響應不包括實體。

+0

完美答案。我從這篇文章中找到了我的答案!非常感謝你提供更好的解釋。 – KomalJariwala 2016-12-29 18:30:20

+0

例如使用Rails的'head:no_content' – Dorian 2017-12-22 19:48:17