我有来自服务器的JSON,如下所示:
data: {
user: {
address: {
id: "id",
city: "city",
street: "street",
.......
}
name: "name",
......
}
authentication: {
token: "token",
id: "id"
}
}
在Ember我有一个模型 auth ,它应该代表我从服务器获得的身份验证模型。由于我在服务器和Ember存储中对同一模型有不同的名称,因此我编写了一个带有一个方法typeForRoot(root)的序列化程序,我只将服务器身份验证映射到Ember auth 。 问题是这个typeForRoot实际上从未被调用过,我也不知道为什么。
这是Ember auth模型:
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);
}
});
我的用户模型已正确保存在商店中(我正在为用户使用单独的,基于模型的序列化程序),但在时收到消息WARNING: Encountered "authentication" in payload, but no model was found for model name "authentication" (resolved model name using shop-app@serializer:user:.typeForRoot("authentication"))
身份验证模型需要保存在商店的 auth 模型中。
有谁知道如何克服这个问题。 谢谢, 米兰
答案 0 :(得分:1)
我认为您实施的typeForRoot
是在auth序列化服务器上?如果您发现错误,则说明:
shop-app@serializer:user:.typeForRoot("authentication")
这特别指向用户序列化器。
我假设您正在请求User模型,该模型会返回数据中的User模型和Auth模型 - 因为您使用User adapter和Serialiser来执行此操作,您需要实现{{1用户序列化器上的逻辑。