我想阻止模型名称的规范化(按惯例划分),而是使用原始名称。我想覆盖函数'normalizeModelName',因为页面http://emberjs.com/api/data/#method_normalizeModelName表明这应该是可能的。但我无法这样做。
只需将新功能分配给DS.normalizeModelName就会返回错误:Cannot assign to read only property 'normalizeModelName' of object '[object Object]'
。
如何防止(内部)模型名称的标准化?
答案 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;
行来查看最新情况。