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

时间:2016-09-06 09:44:38

标签: ember.js ember-data

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

只需将新功能分配给DS.normalizeModelName就会返回错误:Cannot assign to read only property 'normalizeModelName' of object '[object Object]'

如何防止(内部)模型名称的标准化?

1 个答案:

答案 0 :(得分:1)

小警告:这与2.10.0相关
我不保证此版本之外或之下的兼容性。你需要自己挖掘相应的文件。

因为我有一个类似的问题,我挖掘了一些余烬数据的源代码并得出以下结论:

你需要使用DS.JSONAPIAdapter扩展pathForType(name),它本质上取名字和camelizes,并在它作为纯文本字符串返回之前复数形式。

这通常会将模型名称从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

这通常会转换为foo-bar,只需执行return dasherize(key); https://github.com/emberjs/data/blob/v2.10.0/addon/serializers/json-api.js#L453-L455

您还可以在序列化程序中挖掘其他一些方法:modelNameFromPayloadKey modelNameFromPayloadType payloadKeyFromModelName payloadTypeFromModelName

只需输入一些debugger;行来查看最新情况。