Ember change normalizeResponse на основе запрашиваемой модели - PullRequest
0 голосов
/ 28 июня 2018

Я использую второе хранилище данных с моим приложением 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 всегда «неизвестный миксин» - не уверен, может ли это помочь.

Как узнать, какая модель была запрошена? С этой информацией я мог бы сделать switch() в normalizeResponse.

Есть ли другой способ достижения моей цели, который не требует от меня создания отдельного адаптера для каждой траектории / модели?

Доступно более десятка функций нормализации . Что-то должно работать для того, чего я пытаюсь достичь.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Вы можете использовать primaryModelClass.modelName.

0 голосов
/ 28 июня 2018

Я думаю, что это отличный пример использования неиспользуемых данных.

Предполагая, что у вас есть модели A, B, C, которые прекрасно работают с данными ember, оставьте их в покое.

Я бы создал отдельный сервис и делал необработанные запросы к этой другой конечной точке. Таким образом, вы замените this.store.query('thing', {args}) отдельным сервисом, который использует ember-ajax (или ember-fetch или что-то еще). Если вам нужно, вы можете использовать этот сервис для хранения нужных вам данных (Ember-data в любом случае является просто сервисом) или вы можете создавать модели и загружать их в хранилище вручную.

Не зная больше о вашей конкретной ситуации, сложно дать конкретный код / ​​совет, но я бы просто избежал этой проблемы и написал свой собственный сервис.

...