5

Ember1.0-pre4を使用しています。

1対1の関係にある2つのモデルがあります。

App.Lesson = DS.Model.extend                               
  timeslot: DS.belongsTo 'App.Timeslot'

App.Timeslot = DS.Model.extend
  lesson: DS.belongsTo 'App.Lesson'

保存時にタイムスロットをレッスンに埋め込むように構成されたアダプターがあります。

App.Adapter = DS.RESTAdapter.extend()  

App.Adapter.map App.Lesson,    
  timeslot: { embedded: 'always' }             

App.Store = DS.Store.extend            
  revision: 11                                 
  adapter: App.Adapter.create()       

次に、レッスンとタイムスロットを作成し、それらを保存しようとします。

lesson = App.Lesson.createRecord
  group: group
lesson.set('timeslot', App.Timeslot.createRecord())

lesson.store.commit()

しかし、保存すると何も埋め込まれず、POSTリクエストが表示されます。1つはレッスン用、もう1つはタイムスロット用です。

常にタイムスロットをレッスンに埋め込むようにEmberに指示するにはどうすればよいですか?

4

1 に答える 1

3

これはバグだと思うので、報告する必要があります。ソースコードをふるいにかけ、いくつかのテストを行うと、構成がまったくcreateRecord考慮されていないことがわかります。embeddedこの構成は、シリアル化および逆シリアル化プロセスにのみ使用されます。

createRecordを呼び出すと、レコードがバケットに追加され、、createdoncommit ember-dataは、バケット内のすべてのレコードに対してajaxポストを起動するだけです。

したがって、コードに戻るには、にember-data2つのレコードを作成し、コミットすると、その中にあるLessonオブジェクトに対してajax post呼び出しを実行し、その後の呼び出しで、最後に残っているレコードTimeslot embeddedに対して別のajaxpostを実行します。Timeslotバケツの中。

lesson = QrTimetable.Lesson.createRecord
  group: group

lesson.set('timeslot', QrTimetable.Timeslot.createRecord())
lesson.store.commit()

残り火データの内部をよりよく理解している誰かが私の主張と矛盾しない限り、これもバグであると私は信じがちです。

これが、トランザクションをコミットするときに呼び出される最後のコードです。

  createRecord: function(store, type, record) {
    var root = this.rootForType(type);

    var data = {};
    data[root] = this.serialize(record, { includeId: true });

    this.ajax(this.buildURL(root), "POST", {
      data: data,
      context: this,
      success: function(json) {
        Ember.run(this, function(){
          this.didCreateRecord(store, type, record, json);
        });
      },
      error: function(xhr) {
        this.didError(store, type, record, xhr);
      }
    });
  },
于 2013-01-28T16:53:57.343 に答える