如何在转换到emberjs中的新路径之前管理新创建的对象而不“保存”?

时间:2013-03-24 20:34:19

标签: forms ember.js persistence

我有一个问题,我有一个新路由的资源。当我转换到新路线时,我创建了一个新对象。在表单上我有取消按钮,删除该对象。但是,如果我单击导航上的链接,说回到资源索引,那么该对象与我在表单中放置的内容一致。管理创建对象然后离开表单的最佳方法是什么?

我的路线:

App.Router.map(function() {
  this.resource('recipes', function() {
    this.route('new');
    this.route('show', { path: '/:recipe_id' });
  });

  this.resource('styles');
});

App.RecipesNewRoute = Ember.Route.extend({
  model: function() {
    return App.Recipe.createRecord({
      title: '',
      description: '',
      instructions: ''
    });
  },

  setupController: function(controller, model) {
    controller.set('styles', App.Style.find());
    controller.set('content', model);
  }
});

我的新路线控制器:

App.RecipesNewController = Ember.ObjectController.extend({
  create: function() {
    this.content.validate()
    if(this.content.get('isValid')) {
      this.transitionToRoute('recipes.show', this.content);
    }
  },

  cancel: function() {
    this.content.deleteRecord();
    this.transitionToRoute('recipes.index');
  },

  buttonTitle: 'Add Recipe'
});

我正在使用版本1.0.0.rc.1

谢谢!

1 个答案:

答案 0 :(得分:2)

每次离开该路线时,您在路线的deactivate方法中放置的任何代码都会被执行。如果用户未明确保存,则以下代码将删除新模型。

App.RecipesNewRoute = Ember.Route.extend({
    // ...

    deactivate: function() {
        var controller = this.controllerFor('recipes.new');
        var content = controller.get('content');
        if (content && content.get('isNew') && !content.get('isSaving'))
            content.deleteRecord();
    },

    // ...
});

作为额外的奖励,您现在无需在用户按下取消按钮时明确删除记录。