我正在尝试保存与自身belongsTo
关系的记录(使用ember-data)
App.Account = DS.Model.extend({
name: DS.attr(),
parent: DS.belongsTo(App.Account)
});
从服务器加载记录时,正确加载关系。但是,当我尝试保存记录(创建或更新)时,不会更新belongsTo记录。我正在尝试明确地设置它:
a.set('parent', b); (where a and b are both valid App.Account records)
查看通过网络发送的数据,不会发送belongsTo
属性。我究竟做错了什么?我可以设置belongsTo
关系而不指定hasMany
关系吗?
答案 0 :(得分:0)
在Ember Data Beta 2中,您需要将DS.belongsTo(App.Account)
更改为DS.belongsTo('account')
。
答案 1 :(得分:0)
据我所知,Ember并不认为父键存储在belongsTo
情况下的子节点上,而是假设父节点保留了所有子节点的列表。 (是的,这很奇怪......)我已经能够通过设置parentId : DS.attr('number')
然后手动填充parentId
来解决这个问题。不太理想,但确实有效。
答案 2 :(得分:0)
与问题的更多信息相比,答案并非如此。我正在打一场类似的战斗,我在我的案例中发现,当序列化发生时,parent
属性是DS.PromiseObject
- 这本身不会成为问题,但是时间序列化正在发生,它不是isSettled
...因此,Ember数据序列化过程选择undefined
。在保存之前和之后,属性已经解决了,所以我认为父对象也被保存并刷新其关系(或其他东西)的事实导致了孩子的{{1} }属性变得不稳定,导致问题。
这个难题的另一部分是Ember数据序列化程序实际上序列化为Javascript 对象,所以你内部有一个这样的对象:parent
,但当该对象被序列化为一个字符串(很可能是浏览器的{ "parent": undefined }
实现?)toJSON
属性完全被删除 - 这就是你所看到的。而且我猜这就是为什么@Jeremy正在观察他正在观察的东西。
现在我只需弄清楚如何修复它。任何人???