Ember 根据查询模型更改 normalizeResponse

Ember change normalizeResponse based on queried model

我在我的 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 功能(映射到使用 pathForType 的假模型适配器 适用于该商店)。但是参数 store 总是相同的(显然)并且参数 promaryModelClass 总是 "unknown mixin" - 不确定这是否有任何帮助。

如何找到请求的型号?有了这些信息,我可以在 normalizeResponse.

中做一个 switch()

有没有不同的方法可以实现我的目标,不需要我为每个 path/model 制作一个单独的适配器?

over a dozen normalize functions available个。有些东西应该对我想要实现的目标有用。

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

假设您的模型 A、B、C 都可以很好地处理 ember 数据,请不要管它们。

我会创建一个单独的服务并向那个不同的端点发出原始请求。因此,您可以将 this.store.query('thing', {args}) 替换为使用 ember-ajax(或 ember-fetch 或其他)的单独服务。如果需要,您可以使用该服务来保存您需要的数据(Ember-无论如何,数据只是一项服务),或者您可以创建模型并手动将它们推送到商店中。

在不了解您的具体情况的情况下,很难给出具体的 code/advice,但我会避免这个问题并编写您自己的自定义服务。

您可以使用 primaryModelClass.modelName.