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
父标签创建了五个标签 one
、two
、three
、four
和 five
。然后,当从标记服务调用保存方法时,理想情况下应将以下数据发送到服务器。
{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.
我正在使用 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
父标签创建了五个标签 one
、two
、three
、four
和 five
。然后,当从标记服务调用保存方法时,理想情况下应将以下数据发送到服务器。
{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.