将JSON序列化为Ember-Data(有效负载中的两个不同模型)

时间:2015-04-13 11:26:45

标签: ember.js ember-data

我有来自服务器的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 模型中。

有谁知道如何克服这个问题。 谢谢, 米兰

1 个答案:

答案 0 :(得分:1)

我认为您实施的typeForRoot是在auth序列化服务器上​​?如果您发现错误,则说明:

shop-app@serializer:user:.typeForRoot("authentication")

这特别指向用户序列化器。

我假设您正在请求User模型,该模型会返回数据中的User模型和Auth模型 - 因为您使用User adapter和Serialiser来执行此操作,您需要实现{{1用户序列化器上的逻辑。