7

私が2つのモデルを持っているとしましょう:

App.Address = DS.Model.extend({
   street: DS.attr('string'),
   person: DS.belongsTo('App.Person')
})

App.Person = DS.Model.extend({
  name: DS.attr('string'),
  addresses: DS.hasMany('App.Address')
})

今私は人を作成します

App.person = App.Person.createRecord({name: 'Bill'});
App.store.commit();

このような人に住所を追加しようとすると

address = App.Address.createRecord({street: '123 Fake Street'});
App.person.get('addresses').pushObject(address);

トランザクションをコミットします

App.store.commit();

新しいアドレスは保存されますが、人物オブジェクトは変更されたものとして認識されません。IDのリストが

{
  ...
  "addresses": []
}

{
  ...
  "addresses": [3]
}

私のpersonオブジェクトが変更され、保存する必要があることをember-dataに通知する方法はありますか?

編集: これは問題を説明するjsfiddleです

4

3 に答える 3

1

現在 (ember-data リビジョン 4) では、これを行う方法はありません。オブジェクトは外部キーを持っているため、属している側でのみ永続化されます。そのため、関係の属している側に値を設定すると、永続化する必要があります。ember データの次のバージョンでは、この問題に対処する必要があります。

于 2012-10-14T06:02:56.963 に答える
1

これに対して私が見つけた回避策は、次のような ID を手動で追加することです。

App.Address = DS.Model.extend({
   street: DS.attr('string'),
   personID: DS.attr('string'),
   person: DS.belongsTo('App.Person')
})

次に、データを送信するときに personId フィールドを設定すると、 person フィールドが送信するように見えるものを模倣します。

于 2013-01-24T12:28:07.393 に答える