【发布时间】:2015-04-13 11:26:45
【问题描述】:
我有来自服务器的 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 模型已正确保存在商店中(我正在为用户使用单独的、基于模型的序列化程序),但是当 authenticationWARNING: Encountered "authentication" in payload, but no model was found for model name "authentication" (resolved model name using shop-app@serializer:user:.typeForRoot("authentication")) /strong>模型需要保存在商店的auth模型中。
有谁知道我该如何克服这个问题。 谢谢, 米兰
【问题讨论】:
-
能否提供文件名?
-
附注:
_super在这种情况下将“auth”“规范化”为“auth”。 -
文件名:Ember 认证模型:auth.js 序列化器:application.js
-
好的,因为它是应用程序序列化程序,我希望它能够将“用户”“翻译”为“”,这可能会导致错误。如果您将此代码放在
auth序列化程序中会发生什么(即重命名文件)? -
我有一个单独的序列化器供用户使用,如果我把这段代码从应用序列化器放入一个授权序列化器,结果和我上面描述的一样。
标签: ember.js ember-data