2013-02-11 12 views
7

私はember.jsをかなり使い慣れていて、いくつかの体験をしています。私は最近、レコードを削除しようとすると少し壁に当たった。ここでは(私は削除呼んでから)私の編集ルートレコードの削除中に別のルートへの移行に失敗しました

は、だから私は、私はdestroyPostをトリガーそこを通ってリンクを持っている
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'); 
    } 
    } 
}); 

です。レコードが正常に削除され、インデックスルートに移行し始めましたが、エラーが発生します...

未知のエラー:ステートrollbackをrootState.deleted.inFlightの状態でオンにしようとしました。定義されていないと呼ばれる

この後、インデックスページのモデルの読み込みが停止し、空のページが表示されます。私は必要な追加コードを提供することができます。ここではインデックスルートです。

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

これらのルートはどちらも正しくロードされることに注意してください。それは私が失敗するだけの移行時です。

答えて

4

保存方法でdidUpdateと同じようにdidDeleteにバインドする必要があります。

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

関連する問題