2013-02-11 44 views
7

我對ember.js相當陌生,我正在做一些實踐。我最近在試圖刪除記錄時遇到了一些困難。這裏是我的編輯路線(從我稱之爲刪除)刪除記錄時,轉換到另一條路由失敗

App.PostsEditRoute = Ember.Route.extend({ 
    model: function(params){ 
    return App.Post.find(params.id); 
    }, 
    exit: function() { 
    this._super(); 
    tx = this.get('currentModel.transaction'); 
    if(tx) 
     tx.rollback(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    }, 
    events: { 
    save: function(post){ 
     post.one('didUpdate', this, function(){ 
     this.transitionTo('posts.show', post); 
     }); 
     post.get('transaction').commit(); 
    }, 
    cancel: function(){ 
     this.transitionTo('posts.show', post); 
    }, 
    destroyPost: function(context) { 
     var post = context.get('content'); 
     post.deleteRecord(); 
     post.get('store').commit(); 
     this.transitionTo('posts.index'); 
    } 
    } 
}); 

所以我要通過我觸發destroyPost的鏈接。記錄被成功刪除,並且我開始轉換到索引路由,但發生錯誤...

未捕獲錯誤:試圖在處於狀態rootState.deleted.inFlight時處理事件rollback。用undefined調用

在此之後,加載索引頁的模型停止,我得到一個空白頁。我可以提供任何所需的附加代碼。這是指數路線。

App.PostsIndexRoute = Em.Route.extend({ 
    model: function(){ 
    return App.Post.find(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    } 
}); 

我應該注意到這兩條路由都是正確加載的。只有在轉型中我纔會失敗。

回答

4

您需要綁定到didDelete,就像您在保存方法中使用didUpdate一樣。

destroyPost: function(context) { 
    var post = context.get('content'); 
    post.one('didDelete', this, function() { 
     this.transitionTo('posts.index'); 
    }); 
    post.deleteRecord(); 
    post.get('transaction').commit(); 
} 

而且,你的代碼似乎有點矛盾:在保存方法您提交的單獨的事務,而在destroyPost你所提交的整個商店。

+1

這工作。我從其他地方拉代碼;我只是試圖在這一點上學習。不過,應該已經通過文檔更好地閱讀。感謝您指點我正確的方向。 – sentinel21 2013-02-16 00:31:49