var ItemEditController = Em.ObjectController.extend({
  setComplete: function () {
    var complete = this.get('canonicalModel.complete');
    this.set('model.complete', complete);
  }.observes('canonicalModel.complete'),

  actions: {
    cancel: function () {
      this.get('model').destroy();
      this.transitionToRoute('items');
    },

    save: function () {
      var self = this,
          item = this.get('model');

      this.api.edit('items', item).then(function (data) {
        var id = Ember.get(data, 'id');

        self.store.load('items', data);
        self.send('refresh');

        self.transitionToRoute('item.index', self.store.find('items', id));
      }).catch(function () {
        alert('Sorry, something went wrong saving your edited item! Please try again later.');
      });
    },
  }
});

export default ItemEditController;

@@ -88,76 +88,496 @@
 var 
-complete = this.get('canonicalModel.complete');%0A   
+model = this.get('model'),%0A        complete;%0A%0A    // this observer fires even when this controller is not part of the active route.%0A    // this is because route controllers are singletons and persist.%0A    // since changing routes destroys the temp model we used for editing, we must%0A    // avoid accessing or mutating it until we know it's fresh (on entering the route).%0A    if (model.isDestroyed) %7B%0A      return;%0A    %7D%0A%0A    complete =
  this.
-s
+g
 et('
+canonicalModel.complete');%0A    
 model.
+set('
 comp

Fix ItemEditController observer accessing model when model was destroyed