Ember-Data - 递归关系

时间:2014-02-07 18:14:15

标签: ember.js ember-data qunit ember-app-kit

我正在使用带有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
        }
    }
});

我找到了similar question,但区别在于Tag也与Node有关系。是否可以通过仅更新子项来更新父子关系?

更新#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的子类)的反向关系

0 个答案:

没有答案