通过覆盖 Ember 数据中的 'normalizeModelName' 来防止模型名称规范化

Prevent normalizing of the model name by overriding 'normalizeModelName' in Ember Data

我想阻止模型名称的规范化(按照惯例使用破折号),而是使用原始名称。我想覆盖函数 'normalizeModelName',因为页面 http://emberjs.com/api/data/#method_normalizeModelName 表明这应该是可能的。但我不能这样做。

简单地将新函数分配给 DS.normalizeModelName 会返回错误:Cannot assign to read only property 'normalizeModelName' of object '[object Object]'.

如何防止(内部)模型名称规范化?

小警告:这与2.10.0有关
我不保证超出或低于此版本的兼容性。需要自己去挖掘对应的文件

因为我遇到了类似的问题,所以我研究了一些 ember-data 东西的源代码并得出以下结论:

您需要使用 pathForType(name) 扩展 DS.JSONAPIAdapter,它基本上采用名称并将其驼峰化以及复数化,然后再将其作为纯文本字符串返回。

这通常会将模型名称从 foo-bar 转换为 fooBars,方法是:https://github.com/emberjs/data/blob/v2.10.0/addon/adapters/json-api.js#L134-L137

现在正好相反:

您需要将 DS.JSONAPISerializer 扩展为 keyForRelationship(key, typeClass, method)

其中 key 本质上是从模型中的关系中获取的模型名称。喜欢:fooBar

这通常通过简单地执行 return dasherize(key); https://github.com/emberjs/data/blob/v2.10.0/addon/serializers/json-api.js#L453-L455

转化为 foo-bar

您可能还会深入研究序列化程序中的其他一些方法:modelNameFromPayloadKey modelNameFromPayloadType payloadKeyFromModelName payloadTypeFromModelName

只需输入一些 debugger; 行即可查看发生了什么。