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]
}

有没有办法让 ember-data 知道我的 person 对象已更改并且需要保存?

编辑: 是一个说明问题的jsfiddle。

4

3 回答 3

1

截至目前(ember-data 修订版 4)没有办法做到这一点。该对象仅保留在 belongsTo 一侧,因为它具有外键,因此如果您在关系的属于一侧设置值,它应该保留。下一个版本的 ember 数据应该会解决这个问题。

于 2012-10-14T06:02:56.963 回答
1

如何为此编写自己的序列化程序,请参阅http://ember-website.thomasboyt.com/api/data/modules/data-serializer.html

于 2014-01-15T17:22:34.940 回答
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 回答