gpt4 book ai didi

javascript - 如何为 Ember 数据创建自定义序列化程序

转载 作者:可可西里 更新时间:2023-11-01 02:38:48 27 4
gpt4 key购买 nike

我有一个 API 返回的 JSON 格式不适合 Ember 使用。而不是这个( Ember 所期待的):

{ events: [
{ id: 1, title: "Event 1", description: "Learn Ember" },
{ id: 2, title: "Event 2", description: "Learn Ember 2" }
]}

我得到:

{ events: [
{ event: { id: 1, "Event 1", description: "Learn Ember" }},
{ event: { id: 2, "Event 2", description: "Learn Ember 2" }}
]}

所以如果我没理解错的话,我需要创建一个自定义序列化程序来修改 JSON。

var store = DS.Store.create({
adapter: DS.RESTAdapter.create({
serializer: DS.Serializer.create({
// which hook should I override??
})
})
});

我已经阅读了与 DS.Serializer 相关的代码注释,但我无法理解如何实现我想要的......

我该怎么做?

ps:我的目标是让 App.Event.find() 工作。目前,我收到 Uncaught Error: assertion failed: Your server returned a hash with key 0 but you have no mapping for it。这就是为什么我需要修复收到的 JSON。

编辑:目前我是这样做的:

extractMany: function(loader, json, type, records) {
var root = this.rootForType(type),
roots = this.pluralize(root);

json = reformatJSON(root, roots, json);
this._super(loader, json, type, records);
}

最佳答案

我假设响应仅包含 ID,并且您正在尝试提取它们。

您需要子类化 DS.JSONSerializer,它提供处理 JSON 负载的基本行为。特别是,您需要覆盖 extractHasMany Hook :

// elsewhere in your file
function singularize(key) {
// remove the trailing `s`. You might want to store a hash of
// plural->singular if you deal with names that don't follow
// this pattern
return key.substr(0, key.length - 1);
}

DS.JSONSerializer.extend({
extractHasMany: function(type, hash, key) {
return hash[key][singularize(key)].id;
}
})

关于javascript - 如何为 Ember 数据创建自定义序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300679/

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