我在Ember应用程序中使用了第二个数据存储,因此我可以与单独的外部API通信。我无法控制此API。
使用DS.JSONSerializer
,我可以添加一些缺少的属性,例如id
:
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
if (requestType == 'query') {
payload.forEach(function(el, index) {
payload[index].id = index
})
}
现在我可以为每个不同的requestType
做一些不同的技巧。但是每个响应都会被解析。现在,有时需要对一个请求的响应进行不同的分析。
所以我想做的是更改每个不同请求路径的normalizeResponse
功能(在 adapter中使用pathForType
映射到伪造模型< / strong>)。但是参数store
总是相同的(很明显),而参数promaryModelClass
总是“ unknown mixin” -不知道这是否有帮助。
如何找到所要求的型号?有了这些信息,我就可以在switch()
中进行normalizeResponse
了。
是否有其他方法可以实现我的目标,而无需为每个路径/模型制作单独的适配器?
有over a dozen normalize functions available。应该为我要实现的目标工作。
答案 0 :(得分:2)
我认为这是不使用余烬数据的用例的一个很好的例子。
假设您拥有适用于余烬数据的A,B,C模型,请不要理会它们。
我将创建一个单独的服务,并向该不同的端点发出原始请求。因此,您可以将this.store.query('thing', {args})
替换为使用ember-ajax(或ember-fetch或其他方式)的单独服务。如果需要,可以使用该服务保存所需的数据(Ember-data仍然是一项服务),也可以创建模型并将其手动推入商店。
在不了解您的确切情况的情况下,很难给出具体的代码/建议,但是我只是避免了这个问题,并编写了自己的自定义服务。
答案 1 :(得分:1)