abali
abali

Reputation: 169

ember.js discard created model if not saving

I have followed the 3 parts of the tutorial here and everything is working fine, with one exception. When I go to the "Add the book" page and then navigate to "List books" without saving, the list of books is extended by an empty item. I suspect that the reason is the following code, where the new model is created before saving and not removed if not saving the form. Any ideas how to fix this?

Embertest.BooksNewRoute = Ember.Route.extend({
  model: function() {
    return this.get('store').createRecord('book');
  },
  actions: {
    create: function() {
      var newBook = this.get('currentModel');
      newBook.save();
      this.transitionTo('books');
    }
  }
});

Upvotes: 0

Views: 305

Answers (2)

Melvin
Melvin

Reputation: 6008

From http://emberjs.com/api/classes/Ember.Route.html#method_deactivate

Add a deactivate function on your route. This is called before exiting this current route. So you can roll back the record you just created in the model like this:

model: function(params) {
    return this.get('store').createRecord('book');
},

deactivate: function() {
    this.currentModel.rollback();
},

Upvotes: 2

abali
abali

Reputation: 169

I solved this by attaching an action to destroy the record to the willTransition event as below. Would anyone comment if this is the right approach?

Embertest.BooksNewRoute = Ember.Route.extend({
  model: function() {
    return this.get('store').createRecord('book');
  },
  actions: {
    willTransition: function() {
      if (this.currentModel.get('isNew')) {
          this.get('currentModel').deleteRecord();
      };  
    },
    create: function() {
      var newBook = this.get('currentModel');
      newBook.save();
      this.transitionTo('books');
    }
  }
});

Upvotes: 1

Related Questions