将 JSON 序列化为 Ember-Data(有效负载中的两个不同模型)
Serialize JSON into Ember-Data (two different models in payload)
我有 JSON 来自服务器,看起来像:
data: {
user: {
address: {
id: "id",
city: "city",
street: "street",
.......
}
name: "name",
......
}
authentication: {
token: "token",
id: "id"
}
}
在 Ember 中我有一个模型 auth 应该代表我从服务器获得的 authentication 模型。由于我在服务器和 Ember 商店中对同一模型使用不同的名称,因此我使用一种方法 typeForRoot(root) 编写了一个序列化程序,其中我只将服务器 authentication 映射到 Ember auth。
问题是这个 typeForRoot 实际上从未被调用过,我不太清楚为什么。
这是Ember授权模型:
import DS from 'ember-data';
export default DS.Model.extend({
token: DS.attr('string')
});
这是我的序列化器:
import DS from 'ember-data';
import Ember from 'ember';
export default DS.RESTSerializer.extend({
typeForRoot: function(root) {
// 'authentication' should become 'auth'
var subRoot = root.substring(0, root.length - 10);
// _super normalizes 'authentication' to 'auth'
return this._super(subRoot);
}
});
我的 user 模型已正确保存在商店中(我正在为用户使用一个单独的、基于模型的序列化程序),但我收到消息 WARNING: Encountered "authentication" in payload, but no model was found for model name "authentication" (resolved model name using shop-app@serializer:user:.typeForRoot("authentication"))
当authentication模型需要保存在商店的auth模型中
有谁知道我该如何解决这个问题。
谢谢,
米兰
我假设您实施的 typeForRoot
是在 auth 序列化器上?如果您注意到错误,它会指出:
shop-app@serializer:user:.typeForRoot("authentication")
这特别指向用户序列化程序。
我假设您正在请求用户模型,其中 returns 数据中的用户模型和 Auth 模型 - 由于您使用用户适配器和序列化器来执行此操作,因此您需要实施用户序列化器上的 typeForRoot
逻辑。
我有 JSON 来自服务器,看起来像:
data: {
user: {
address: {
id: "id",
city: "city",
street: "street",
.......
}
name: "name",
......
}
authentication: {
token: "token",
id: "id"
}
}
在 Ember 中我有一个模型 auth 应该代表我从服务器获得的 authentication 模型。由于我在服务器和 Ember 商店中对同一模型使用不同的名称,因此我使用一种方法 typeForRoot(root) 编写了一个序列化程序,其中我只将服务器 authentication 映射到 Ember auth。 问题是这个 typeForRoot 实际上从未被调用过,我不太清楚为什么。
这是Ember授权模型:
import DS from 'ember-data';
export default DS.Model.extend({
token: DS.attr('string')
});
这是我的序列化器:
import DS from 'ember-data';
import Ember from 'ember';
export default DS.RESTSerializer.extend({
typeForRoot: function(root) {
// 'authentication' should become 'auth'
var subRoot = root.substring(0, root.length - 10);
// _super normalizes 'authentication' to 'auth'
return this._super(subRoot);
}
});
我的 user 模型已正确保存在商店中(我正在为用户使用一个单独的、基于模型的序列化程序),但我收到消息 WARNING: Encountered "authentication" in payload, but no model was found for model name "authentication" (resolved model name using shop-app@serializer:user:.typeForRoot("authentication"))
当authentication模型需要保存在商店的auth模型中
有谁知道我该如何解决这个问题。 谢谢, 米兰
我假设您实施的 typeForRoot
是在 auth 序列化器上?如果您注意到错误,它会指出:
shop-app@serializer:user:.typeForRoot("authentication")
这特别指向用户序列化程序。
我假设您正在请求用户模型,其中 returns 数据中的用户模型和 Auth 模型 - 由于您使用用户适配器和序列化器来执行此操作,因此您需要实施用户序列化器上的 typeForRoot
逻辑。