不再调用Ember Data TypeForRoot

时间:2015-06-06 05:47:39

标签: ember.js ember-data

我们目前使用的是Ember Data 1.0.0-beta.18,Ember 1.12和CLI 0.2.7。

自上次更新以来,我们正在获得如下的ember数据断言警告:

[Warning] WARNING: Encountered "open_requests" in payload, but no model was found for model name "open-request" (resolved model name using vault@serializer:appuser:.typeForRoot("open_requests")) (vendor.js, line 15423)

我还注意到,我们不再调用appuser序列化程序中包含的控制台日志:

export default DS.RESTSerializer.extend( {
    typeForRoot: function(root) {
        console.log('appuser serializer called', root);
        if (root === 'open_requests') return this._super('openrequest');
        return this._super(root);
    },
});

我可以确认在此更新之前调用了TypeForRoot。自升级以来,我们遇到了许多其他问题,看起来它们都可能以某种方式与序列化器相关,所以问题就是为什么我们得到这些警告以及为什么不再调用typeForRoot?

2 个答案:

答案 0 :(得分:3)

Ember数据已切换为modelNameFromPayloadKey,代码中不再使用typeForRoot,除非您专门调用它。

http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_typeForRoot

答案 1 :(得分:3)

beta.18引入了一个潜在的重大变化 - 看起来它导致你的应用程序崩溃..

简答:typeForRoot重命名为modelNameFromPayloadKey

来自CHANGELOG

[#3034] 可能发生变化如果您覆盖typeForRoot目前正在引入modelNameFromPayloadKey并弃用typeForRoot @fivetanley

  • RESTSerializer#typeForRoot已被弃用。您可以改为使用RESTSerializeer#modelNameFromPayloadKey

  • 添加了RESTSerializer#payloadKeyFromModelName。这允许你

  • 不推荐使用关于快照和模型类的
  • typeKey。请改用modelName。指定JSON有效负载的传出根密钥。

来自Blog Post

DS.RESTSERIALIZER.TYPEFORROOT现在是DS.RESTSERIALIZER.MODELNAMEFROMPAYLOADKEY

为了在typeKeymodelName的命名更改中获得更多一致性,typeForRoot已重命名为modelNameFromPayloadKey。该功能用于相同的目的,因此这应该是您可以通过在项目中搜索和替换来实现的快速重构。虽然调用typeForRoot会触发弃用警告,但是在子类中覆盖不会。