通过覆盖 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;
行即可查看发生了什么。
我想阻止模型名称的规范化(按照惯例使用破折号),而是使用原始名称。我想覆盖函数 '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;
行即可查看发生了什么。