Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

while deleting record, transition to another route fails

I'm fairly new to ember.js and I'm doing some experiements. I recently hit a bit of a wall when trying to delete records. Here is my editing route (from which I call delete)

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');
     }
  }
});

So I have a link through which I trigger destroyPost. The record is successfully deleted, and I start to transition to the index route, but an error occurs...

Uncaught Error: Attempted to handle event rollback on while in state rootState.deleted.inFlight. Called with undefined

After this, loading the models for the index page stops and I get an empty page. I can provide any additional code required. Here is the index route.

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

I should note that both of these routes load correctly by themselves. It's only in transition that I get failure.

like image 323
sentinel21 Avatar asked Feb 11 '13 20:02

sentinel21


1 Answers

You need to bind to didDelete like you did with didUpdate in save method.

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

Also, your code seems a bit inconsistent: in the save method you're committing a separate transaction, while in destroyPost you are committing the whole store.

like image 103
Shimon Rachlenko Avatar answered Oct 11 '22 14:10

Shimon Rachlenko