6

GitHub でhttps://github.com/dgeb/ember_data_exampleの下にある ember-data の適切な実例を見つけて、ネストされたリソース (「has_many: コメント」) でそれを拡張しようとしました。元の例では、編集ビューがオンになるたびに新しいトランザクションが作成され、編集モードを終了すると送信/ロールバックされます。

新しいコメントを content.comments に追加したいのですが、「コンテンツ」が既にトランザクションにあるため、実行できず、エラーが発生します (エラー: アサーションに失敗しました: レコードが変更された後、それを別のトランザクションに移動することはできません) )。

私が実現しようとしている考えは間違っているのでしょうか?

App.EditContactController = Em.Controller.extend({
  content: null,

  addComment: function () {
    // ERROR here:
    this.get('content.comments').addObject(App.Comment.createRecord({body: ''}));
  },

  enterEditing: function() {
    this.transaction = this.get('store').transaction();
    if (this.get('content.id')) {
      this.transaction.add(this.get('content'));
    } else {
      this.set('content', this.transaction.createRecord(App.Contact, {}));
    }
  },

  exitEditing: function() {
    if (this.transaction) {
      this.transaction.rollback();
      this.transaction = null;
    }
  },

  updateRecord: function() {
    // commit and then clear the transaction (so exitEditing doesn't attempt a rollback)
    this.transaction.commit();
    this.transaction = null;
  }
});
4

1 に答える 1

1

私がやったことからインスピレーションを得ることができると思います: https://github.com/sly7-7/ember_data_example/commit/57ee7ea6ca44e3a2fbba96fff4ad088a8d786a3c

おそらく、単に実行するだけでうまくthis.get('content.comments').createRecord({body: ''})いくでしょう。この呼び出しは ManyArray.createRecord() を参照し、関係の所有者のトランザクションを使用して新しいレコードを作成します。https://github.com/sly7-7/data/blob/master/packages/ember-data/lib/system/record_arrays/many_array.js#L163を参照してください

于 2012-12-19T19:03:39.663 に答える