删除记录时,转换到另一个路由失败

sen*_*l21 7 ember.js ember-data

我是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');
     }
  }
});
Run Code Online (Sandbox Code Playgroud)

所以我有一个链接,通过它我触发destroyPost.记录已成功删除,我开始转换到索引路由,但发生错误...

未捕获错误:rollback在状态rootState.deleted.inFlight中尝试处理事件.调用未定义

在此之后,加载索引页面的模型停止,我得到一个空页面.我可以提供所需的任何其他代码.这是索引路线.

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

我应该注意,这两个路由都是自己正确加载的.只有在过渡时我才会失败.

Shi*_*nko 4

您需要didDelete像在 save 方法中那样进行绑定didUpdate

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

另外,您的代码似乎有点不一致:在 save 方法中您提交了一个单独的事务,而在destroyPost您提交了整个存储。