gpt4 book ai didi

javascript - 具有嵌入式 hasMay 关系的 EmberJS RESTSerializer

转载 作者:行者123 更新时间:2023-12-03 07:06:13 25 4
gpt4 key购买 nike

我有一个返回 channel 的简单 API,每个 channel 都包含许多故事。 API 返回以下 channel 结构:

{
"id": 1,
"name": "The Awesome Channel",
"stories": [
{
"icon": null,
"id": 3,
"pub_date": "2015-08-08T17:32:00.000Z",
"title": "First Cool Story"
},
{
"icon": null,
"id": 4,
"pub_date": "2015-10-20T12:24:00.000Z",
"title": "Another Cool Story"
}
]
}

我定义了以下两个模型,channel.js:

import DS from 'ember-data';

export default DS.Model.extend({
name: DS.attr('string'),
bgurl: DS.attr('string'),
stories: DS.hasMany('story')
});

story.js:

import DS from 'ember-data';

export default DS.Model.extend({
channelId: DS.attr('number'),
title: DS.attr('string'),
pubDate: DS.attr('string'),
icon: DS.attr('string'),
});

我还有这个 RESTSerializer 来反序列化 channel :

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
normalizeArrayResponse(store, primaryModelClass, hash, id, requestType) {
var newHash = {
channels: hash
};
return this._super(store, primaryModelClass, newHash, id, requestType);
},

normalizeSingleResponse(store, primaryModelClass, hash, id, requestType) {
// Convert embedded data into a lost of story ids
var stories = hash.stories.map(function(story) {
return story.id;
});
delete hash.stories;
hash.stories = stories;
var newHash = {
channel: hash,
};
return this._super(store, primaryModelClass, newHash, id, requestType);
}
});

上面的代码可以工作,但它会针对 channel 中的每个故事向服务器发出新请求,但由于数据已包含在响应中,因此不需要这些额外的请求。如果我保留故事数据,则数据标准化将失败。

有没有办法表明相关模型的数据已嵌入到响应中?

最佳答案

您是否尝试将故事声明为嵌入到 channel 序列化程序中?

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
stories: { embedded: 'always' }
},

normalizeArrayResponse(store, primaryModelClass, hash, id, requestType) {

...
});

关于javascript - 具有嵌入式 hasMay 关系的 EmberJS RESTSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com