2014-01-07 53 views
3

我試圖把我認爲是一個非常簡單的餘燼刪除操作(基於此示例:http://discuss.emberjs.com/t/migrating-from-ember-data-0-13-to-1-0-0-beta-1-my-findings/2368)從索引控制器,我認爲我必須缺少的東西。在與Ember數據刪除行爲中的狀態不佳

我試圖刪除具有相應依賴項的區域時遇到了麻煩。在這種情況下,服務器(軌道4)拋出一個異常,並返回以下JSON:

{"status":422,"message":"Cannot delete record because of dependent projects","errors":{}} 

不過,雖然我相信服務器返回正確的錯誤,UI看起來它得到那麼遠之前失敗。如果我把一個調試器就行了捕捉功能裏面zone.rollback()後,我得到這個錯誤:

Attempted to handle event `becameInvalid` on <App.Zone:ember1276:6> while in state root.deleted.inFlight. Called with {}. 

我在灰燼1.4.0-beta.1運行,燼數據1.0.0 -β.4(ActiveModelAdapter)和rails 4.0.1。任何建議將不勝感激,謝謝!

回答

2

手動轉換到loaded.saved狀態回滾之後似乎解決問題:

zone.transitionTo('loaded.saved'); 

我現在可以升級到最新的餘燼/燼數據和略微修改JSON響應後使用傳入catch表達式的錯誤引用將錯誤消息從JSON中提取出來。

{"status":422,"message":"translation missing: en.Invalid zone","errors":{"base":["Cannot delete record because dependent projects exist"]}} 

而且燼版本:

DEBUG: Ember  : 1.4.0-beta.1+canary.4d69bca7 ember.js?body=1:3307 
DEBUG: Ember Data : 1.0.0-beta.5+canary.2e773365 ember.js?body=1:3307 
DEBUG: Handlebars : 1.0.0 ember.js?body=1:3307 
DEBUG: jQuery  : 1.10.2 
0

我遇到了這個問題爲好。運行model.transitionTo('loaded.saved');有助於帶來任何錯誤,模型也被破壞。

如果想保持模型的商店,必須重新注入它,這似乎很奇怪,但工程:

var model = this.get('model'); 
var store = model.store; 
model.deleteRecord(); 
model.save().catch(function(err){ 
    model.transitionTo('loaded.saved'); 
    var payload = model.serialize({includeId: true}); 
    store.unloadRecord(model) 
    store.pushPayload('nestedSet',{nested_set:payload}); 
}); 

我運行:

DEBUG: ------------------------------- 
DEBUG: Ember  : 1.8.0-beta.1+canary.d6d4f01d 
DEBUG: Ember Data : 1.0.0-beta.9 
DEBUG: Handlebars : 1.3.0 
DEBUG: jQuery  : 1.11.1 
DEBUG: ------------------------------- 

對於版本測試完整性同樣發生在ember-data#1.0.0-beta.7

希望它有幫助,如果有人遇到這一點。