2016-11-09 83 views
0

我正在使用Ember的Ember 2.4.6和JSONApiAdapter来获取数据并将数据发送到节点服务器。Ember不坚持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') //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(); 
     }); 
    }); 
    } 
}); 

现在,这里的问题是,当我说了根标签5子标签,那么关系越来越坚持只为最后的标签,即第五个标签。

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

{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"}}}}} 

,并为所有其他标签,父数据是越来越错过。

不能准确理解为什么会发生这种情况。请在这里建议我做错了什么。

+0

您的模型是'tag'类型还是'userfield'类型?它似乎改变了模型定义和样本数据 – Beno

+0

@Beno谢谢,指出,纠正了问题 – Sumit

+0

您的回购没有完全相同的内容 – JonRed

回答

0

在你的标签模式,试试这个:

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

从页面:

当你要定义一个自反关系(自我关系具有 关系的模型),则必须明确定义关系逆 。如果没有反向关系,则可以将 inverse设置为null。