灰烬变化基于查询模型的normalizeResponse

时间:2018-06-28 12:30:24

标签: serialization ember.js normalization

我在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。应该为我要实现的目标工作。

2 个答案:

答案 0 :(得分:2)

我认为这是不使用余烬数据的用例的一个很好的例子。

假设您拥有适用于余烬数据的A,B,C模型,请不要理会它们。

我将创建一个单独的服务,并向该不同的端点发出原始请求。因此,您可以将this.store.query('thing', {args})替换为使用ember-ajax(或ember-fetch或其他方式)的单独服务。如果需要,可以使用该服务保存所需的数据(Ember-data仍然是一项服务),也可以创建模型并将其手动推入商店。

在不了解您的确切情况的情况下,很难给出具体的代码/建议,但是我只是避免了这个问题,并编写了自己的自定义服务。

答案 1 :(得分:1)

您可以使用primaryModelClass.modelName