【问题标题】:while deleting record, transition to another route fails删除记录时,转换到另一条路线失败
【发布时间】:2013-01-27 00:28:09
【问题描述】:

我对 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。未定义调用

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

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

我应该注意,这两条路线都可以自行正确加载。只有在过渡中我才会失败。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您需要绑定到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 中,您提交了整个存储。

    【讨论】:

    • 这行得通。我从别处提取了代码;我只是想在这一点上学习。不过,应该更好地阅读文档。感谢您为我指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多