gpt4 book ai didi

javascript - 在最新的 Ember Data 版本中使用 RESTSerializer 格式化 JSON

转载 作者:行者123 更新时间:2023-11-29 18:17:39 26 4
gpt4 key购买 nike

我正在努力将我的 JSON 转换为正确的格式。

为了说明我做了一个快速的 JSfiddle。

http://jsfiddle.net/chrismasters/NQKvy/638/

服务器返回数据的格式与 Ember Data 现在推荐的首选格式有一些不同。

这是原始的 JSON 输出

{
"video": {
"uuid": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd",
"state": "pending",
"theme": "basic",
"resolution": "nHD",
"title": "Test title",
"track": {
"uuid": "376fc3bb-d703-49e7-9d92-bce7f6bf8b56",
"state": "complete",
"source": "upload"
}
}
}

首先,它使用的是字符串形式的 UUID,而不是 ID。

我似乎已经设法使用 normalizeHash 修复了这个问题,至少对于视频来说是这样 - 但我不确定同样的方法是否也会修复轨道模型 - 特别是如果我根据需要使用嵌入。

这是开始出现大问题的地方,如果我从视频模型中注释掉 belongsTo 关系,那么它就可以正常工作,所以我认为......这显然是嵌入式轨道数据的 JSON 格式问题。

这是模型定义和序列化

App.Video = DS.Model.extend({
title: DS.attr('string'),
//track: DS.belongsTo('track', { embedded: true })
});

App.VideoSerializer = DS.RESTSerializer.extend({
normalizeHash: {
video: function(hash) {
hash.id = hash.uuid;
delete hash.uuid;
return hash;
}
}
});

关于如何将此响应格式化为 Ember Data 可识别的格式的建议,我非常感谢。

此外 - 是否有人知道调试这些序列化转换的工具或好方法,因为目前来自 Ember 的错误消息在调试或查看序列化输出是什么方面不是很有帮助。

非常感谢您提出的任何帮助。

克里斯

最佳答案

如果其他人对序列化有同样的困惑,我想我会解释如何解决这个问题。

这是工作的 jsbin:

http://jsbin.com/fuzu/4

主要有以下几点:

主键

primaryKey: 'uuid'

对于将 id 转换为正确的命名很有用,并且需要显式应用于任何序列化程序(在 ApplicationSerializer 上全局使用似乎不起作用)。

模型关系

track: DS.belongsTo('track', {embedded: true} )

确保关系的定义包括嵌入 & 仅在一侧。

提取单个

extractSingle: function(store, type, payload, id, requestType) {
var tracks = [];
var track = payload.video.track;
var video = payload.video;

tracks.push(track);

video.track = payload.video.track.uuid;

payload = { video: video, track: tracks };

return this._super(store, type, payload, id, requestType);
}

复数化对于 Ember Data 理解关系非常重要,即使模型关系是 belongsTo。

您可以在所需的(有效的)JSON 中清楚地看到这一点

{
"video": {
"id": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd",
"state": "pending",
"theme": "basic",
"resolution": "nHD",
"title": "Test title",
"track": "2"
},
"track": [{
"id": "2",
"state": "complete",
"source": "upload"
}]
}

视频中的轨道值没有包裹在一个数组中,但根轨道值一个数组。

出于这个原因,我发现它非常有用,首先定义所需的 JSON 并首先测试它是否正常工作,然后尝试将真正的 JSON 转换成该格式。

我认为一个工具可以帮助完成这个过程(从序列化中可视化实时 JSON 输出)可能是对 Ember Data 的一个很好的补充,我打算创建一些东西。

关于javascript - 在最新的 Ember Data 版本中使用 RESTSerializer 格式化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634433/

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