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
.
我在我的 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
.