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 をトリガーするためのリンクがあります。無事にレコードが削除され、インデックスルートに遷移し始めるがエラーが発生…

キャッチされないエラー: rollbackrootState.deleted.inFlight 状態でイベントを処理しようとしました。未定義で呼び出されます

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

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

これらのルートは両方とも、それ自体で正しく読み込まれることに注意してください。私が失敗するのは過渡期だけです。

4

1 に答える 1

4

save メソッドで 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();
 }

また、あなたのコードは少し矛盾しているようです: save メソッドでは別のトランザクションをコミットしていdestroyPostますが、ストア全体をコミットしています。

于 2013-02-12T13:05:36.910 に答える