Ember 侧载数据未链接
Ember sideload data not linked
我刚开始使用 Ember,被分配到一个正在进行的项目,需要解决以下问题:
export default class OrderModel extends Model.extend(LoadableModel) {
@attr('string') status;
@attr('number') total;
@hasMany('order-item', { async: true }) orderItems;
}
export default class OrderItemModel extends Model.extend(LoadableModel) {
@attr('number', { defaultValue: 0 }) discount;
@attr('number', { defaultValue: 0 }) price;
@hasMany('item-fix', { async: false }) fixes;
}
export default class ItemFixModel extends Model.extend(LoadableModel) {
@attr('number', { defaultValue: 0 }) price;
}
当我这样做时 let order = await this.store.findRecord('order', order_id, { reload: true });
json 响应是:
data: {
type: "orders",
id: "1584",
attributes: {
status: "in_progress",
total: 1300
},
relationships: {
order-items: {
data: [
{
type: "order-items",
id: "1801
}
]
}
}
},
included: [
{
type: "order-items"
id: "1801",
attributes: {
discount: 0,
price: 1200
},
relationships: {
item-fixes: {
data: [
{
type: "item-fixes",
id: "335"
}
]
}
},
{
type: "item-fixes",
id: "335",
attributes: {
price: 100
}
}
]
但是当我检查 order
变量中的 orderItem
时,itemFixes
是空的,但在响应的侧载中。
¿如何才能 link 这种嵌套关系?
此外,这是序列化程序。
export default DS.JSONAPISerializer.extend({
serialize(snapshot) {
let serialized = this._super(...arguments);
let { adapterOptions } = snapshot;
if (adapterOptions && adapterOptions.addPromotionCode) {
return { code: serialized.data.attributes.code }
}
serialized.included = A([]);
snapshot.eachRelationship((key, relationship) => {
if (relationship.kind === 'belongsTo') {
if (!isBlank(snapshot.belongsTo(key))) {
let node = snapshot.belongsTo(key).record.serialize({ includeId: true }).data;
delete node.relationships;
serialized.included.pushObject(node);
}
} else if (relationship.kind === 'hasMany') {
if (!isBlank(snapshot.hasMany(key))) {
snapshot.hasMany(key).forEach(ele => {
let node = ele.record.serialize({ includeId: true }).data;
delete node.relationships;
serialized.included.pushObject(node);
});
}
}
});
return serialized;
}
});
在您的回复中关系名称是 item-fixes
但在您的模型中它只是 fixes
。一定是一样的。
我刚开始使用 Ember,被分配到一个正在进行的项目,需要解决以下问题:
export default class OrderModel extends Model.extend(LoadableModel) {
@attr('string') status;
@attr('number') total;
@hasMany('order-item', { async: true }) orderItems;
}
export default class OrderItemModel extends Model.extend(LoadableModel) {
@attr('number', { defaultValue: 0 }) discount;
@attr('number', { defaultValue: 0 }) price;
@hasMany('item-fix', { async: false }) fixes;
}
export default class ItemFixModel extends Model.extend(LoadableModel) {
@attr('number', { defaultValue: 0 }) price;
}
当我这样做时 let order = await this.store.findRecord('order', order_id, { reload: true });
json 响应是:
data: {
type: "orders",
id: "1584",
attributes: {
status: "in_progress",
total: 1300
},
relationships: {
order-items: {
data: [
{
type: "order-items",
id: "1801
}
]
}
}
},
included: [
{
type: "order-items"
id: "1801",
attributes: {
discount: 0,
price: 1200
},
relationships: {
item-fixes: {
data: [
{
type: "item-fixes",
id: "335"
}
]
}
},
{
type: "item-fixes",
id: "335",
attributes: {
price: 100
}
}
]
但是当我检查 order
变量中的 orderItem
时,itemFixes
是空的,但在响应的侧载中。
¿如何才能 link 这种嵌套关系?
此外,这是序列化程序。
export default DS.JSONAPISerializer.extend({
serialize(snapshot) {
let serialized = this._super(...arguments);
let { adapterOptions } = snapshot;
if (adapterOptions && adapterOptions.addPromotionCode) {
return { code: serialized.data.attributes.code }
}
serialized.included = A([]);
snapshot.eachRelationship((key, relationship) => {
if (relationship.kind === 'belongsTo') {
if (!isBlank(snapshot.belongsTo(key))) {
let node = snapshot.belongsTo(key).record.serialize({ includeId: true }).data;
delete node.relationships;
serialized.included.pushObject(node);
}
} else if (relationship.kind === 'hasMany') {
if (!isBlank(snapshot.hasMany(key))) {
snapshot.hasMany(key).forEach(ele => {
let node = ele.record.serialize({ includeId: true }).data;
delete node.relationships;
serialized.included.pushObject(node);
});
}
}
});
return serialized;
}
});
在您的回复中关系名称是 item-fixes
但在您的模型中它只是 fixes
。一定是一样的。