我正在使用带有 ember-data 的 ember-app-kit。我使用 ember-data 创建了以下两个模型。Node 具有递归关系,并且 Tag 具有对 Node 的引用。
Node = DS.Model.extend({
name: DS.attr('string'),
createdAt: DS.attr('date'),
tags: DS.hasMany('tag', {async: true}),
children: DS.hasMany('node', {async: true, inverse: 'parent'}),
parent: DS.belongsTo('node', {async: true, inverse: 'children'})
});
Tag = DS.Model.extend({
name: DS.attr('string'),
parent: DS.belongsTo('node', {async: true})
});
每当我尝试将标签重新分配给不同的父级时,更改不会持续存在。
NodeController = Ember.Controller.extend({
actions: {
update: function(newParentNode) {
var node = model;
node.set('parent', newParentNode);
node.save().then(function(updatedNode){
updatedNode.get('parent');// returns null
}); //doesn't work
}
}
});
我发现了一个类似的问题,但不同之处在于 Tag 也与 Node.js 有关系。是否可以仅通过更新孩子来更新父子关系?
更新#1:
在控制台中检查 ember-data 的输出时,我注意到在保存时没有传达任何有关父子关系的信息。发送到后端的请求负载如下:
{ "node": { "name": "node4", "createdAt": null } }
没有任何关于父/子关系的传输。但是,如果我将标签重新分配给不同的节点,后端会收到以下信息:
{"tag": {"name":"tag123", "parent":"66c8ec8c-3790-45b2-8669-e9581102376d"} }
我尝试通过删除逆来简化我的节点模型。这允许我重新分配父母,但 ember-data 开始在请求中发送子关系作为更新关系的手段。
{ "node": {
"name": "node4",
"createdAt": null,
"children": ["66c8ec8c-3790-45b2-8669-e9581102376d"]
}
}
虽然这可以完成工作,但并不理想。因为可能有很多孩子,发送每个孩子的 id 会使请求负载膨胀。ember-data 是否无法使用其新的父关系密钥发送子节点的更新信息?此更改还导致 Qunit 中开始出现错误消息。
您在(DS.Model 的子类)上定义了“父”关系,但在(DS.Model 的子类)上发现了多个可能的逆向关系类型(DS.Model 的子类)