0

我有一个问题,我有一个新路线的资源。当我过渡到那条新路线时,我创建了一个新对象。在表单上,​​我有取消按钮,它会删除该对象。但是,如果我单击导航上的链接,例如返回资源索引,则该对象与我在表单中输入的任何内容都存在。管理创建对象然后离开表单的最佳方法是什么?

我的路线:

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

谢谢!

4

1 回答 1

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();
    },

    // ...
});

作为额外的好处,您现在不需要在用户按下取消按钮时显式删除记录。

于 2013-03-24T21:34:44.530 回答