2

Ember Data を使用して、非常にシンプルな Ember アプリを作成しました。ユーザーがエンティティを作成して送信するフォームが 1 つあります。それはBandsNewView(Emberによって自動的に作成された)にあり、によって制御されBandsNewControllerます:

App.BandsNewController = Ember.Controller.extend({
    cancel: function() {
        this.transitionTo('bands');
    },

    save: function() {
        App.Band.createRecord(this);
        this.get('store').commit();

        this.set('name');
        this.set('description');
        this.transitionTo('bands');
    }
});

新しいバンド エンティティを保存した後、フォームを "クリーンアップ" (つまり、空) するためのより簡単な解決策があるかどうか疑問に思いますか? this.set()すべてのフィールドを空にする のようなことを言えますか? または、私のアプローチは本質的に間違っていますか?まったく別の方法で行う必要がありますか?

4

1 に答える 1

2

私が楽しんでいるパターンは、ルート自体の出入りでオブジェクトを作成および破壊することです。

App.BandsNewRoute = Ember.Route.extend({
  model: function(params) {
    return App.Band.createRecord({});
  },
  save: function() {
    this.get('currentModel.store').commit();
    return this.transitionTo('bands');
  },
  exit: function() {
    var model = this.get('currentModel');
    if (model.get("isNew") && !model.get("isSaving")) {
      return model.get('transaction').rollback();
    }
  }
});

ご覧のとおり、出口関数はもう少し複雑になりますが、すべてのオブジェクト作成ルートでまったく同じになるため、それを除外できます。これで、テンプレートはモデルのプロパティに直接バインドでき、モデルは保存時に保存されるか、終了時にロールバックされます (フォームがクリアされます)。

他のデータ モデルを保存せずに変更する可能性がある場合、または保存されていないモデルがある場合、モデルを安全に消去する方法は、モデルを独自のトランザクションに入れることです。これは、現在のフローの主な焦点ではないオブジェクトに対してのみ使用する傾向があります。

App.BandsNewRoute = Ember.Route.extend({
  model: function(params) {
    var transaction = this.get('store').transaction();
    return transaction.createRecord(App.Band, {})
  }
});

他のすべては同じままでかまいません。

于 2013-02-10T11:58:09.607 に答える