Ember 不保留 belongsTo 数据

Ember not persisting belongsTo data

我正在使用 Ember 2.4.6 和 Ember 的 JSONApiAdapter 来获取数据并将数据发送到节点服务器。

我有以下标签模型:

import DS from 'ember-data';

export default DS.Model.extend({
  label: DS.attr('string'),
  isRoot: DS.attr('boolean', {defaultValue: false'}),
  parent: DS.belongsTo('tag') //belongs to self type
});

这里的逻辑是用户可以为给定的根标签输入多个子标签。为了保存子标签和根标签,我使用了标签服务中的保存方法。标签服务的保存方法如下

import Ember from 'ember';

export default Ember.Service.extend({

  //Some other code

  save: function(parent, children){
    return parent.save().then(response => {
      return children.map(tag => {
        tag.set('parent', response);
        return tag.save();
      });
    });
  }
});

现在的问题是,当我为根标签说了五个子标签时,关系只会持续到最后一个标签,即第五个标签。

我为 root 父标签创建了五个标签 onetwothreefourfive。然后,当从标记服务调用保存方法时,理想情况下应将以下数据发送到服务器。

{data: {id: 1, type: 'tags', attributes: {label: "root", "is-root": true}, relationships: {parent: {data: null}}}}
{data: {id: 2, type: 'tags', attributes: {label: "one", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}
{data: {id: 3, type: 'tags', attributes: {label: "two", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}
{data: {id: 4, type: 'tags', attributes: {label: "three", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}
{data: {id: 5, type: 'tags', attributes: {label: "four", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}
{data: {id: 6, type: 'tags', attributes: {label: "five", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}

而是将以下信息发送到服务器

{data: {id: 1, type: 'tags', attributes: {label: "root", "is-root": true}, relationships: {parent: {data: null}}}}
{data: {id: 2, type: 'tags', attributes: {label: "one", "is-root": false}, relationships: {parent: {data: null}}}}
{data: {id: 3, type: 'tags', attributes: {label: "two", "is-root": false}, relationships: {parent: {data: null}}}}
{data: {id: 4, type: 'tags', attributes: {label: "three", "is-root": false}, relationships: {parent: {data: null}}}}
{data: {id: 5, type: 'tags', attributes: {label: "four", "is-root": false}, relationships: {parent: {data: null}}}}
{data: {id: 6, type: 'tags', attributes: {label: "five", "is-root": false}, relationships: {parent: {data: {id: 1, type: "tags"}}}}}

只为最后一个标签发送 belongsTo 信息,对于所有其他标签,父数据丢失。

无法准确理解为什么会这样。请在这里指出我做错了什么。

在您的标签模型中,试试这个:

import DS from 'ember-data';

export default DS.Model.extend({
  label: DS.attr('string'),
  isRoot: DS.attr('boolean', {defaultValue: false}),
  parent: DS.belongsTo('tag', {inverse: null})
});

您可以在此处获得有关自反关系的更多信息:https://guides.emberjs.com/v2.9.0/models/relationships/#toc_reflexive-relations

来自页面:

When you want to define a reflexive relation (a model that has a relationship to itself), you must explicitly define the inverse relationship. If there is no inverse relationship then you can set the inverse to null.