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 に答える