Загрузка с Ember Data

Я пытаюсь избавиться от некоторых асинхронных отношений в Ember-Data и загружать их, но сталкиваюсь с некоторыми проблемами.

Мой API отправляет обратно связанные данные, но записи - это свойства каждого возвращаемого объекта, а не отдельного массива / объекта в корне. я использую extractArray искажать данные так, чтобы ЭД это нравилось, но они не совсем понимали это правильно. Вот пример данных, возвращаемых из API:

{
  "record": [
    {
      "id": 2,
      "name": "3M Aerospace",
      "currency": 6,
      "paymentTerms": 3,
      "Currencies_by_currency": {
        "id": 6,
        "currency": "USD",
        "description": "US Dollar",
        "sortOrder": 1
      },
      "PaymentTerms_by_paymentTerms": {
        "id": 3,
        "term": "NET10",
        "description": "Due with 10 days of invoice date"
        "sortOrder": 3
      }
    },
    {
      "id": 3,
      "name": "BAE Aerospace",
      "currency": 6,
      "paymentTerms": 3,
      "Currencies_by_currency": {
        "id": 6,
        "currency": "USD",
        "description": "US Dollar"
        "sortOrder": 1
      },
      "PaymentTerms_by_paymentTerms": {
        "id": 3,
        "term": "NET10",
        "description": "Due with 10 days of invoice date"
        "sortOrder": 3
      }
    }
  ]
}

Я знаю, мне нужно получить Countries_by_mailingAddressCountry, Currencies_by_currency, а также PaymentTerms_by_paymentTerms вне корня объекта. Куда именно они должны идти? Я думал, что это должно быть:

{
    "record": [
        {
            "id": 2,
            // other data...
            "currency": 6,
            "paymentTerms": 3,
            // more data...
        }, {
            "id": 3,
            // other data...
            "currency": 6,
            "paymentTerms": 3,
            // more data...
        }
    ],
    "currencies": [
        {
            "id": 6,
            "currency": "USD",
            "description": "US Dollar",
            "sortOrder": 1
        }
    ],
    "paymentTerms": [
        {
            "id": 3,
            "term": "NET10",
            "description": "Due with 10 days of invoice date",
            "isActive": true,
            "sortOrder": 3
        }
    ]
}

но ED жалуется, что не может найти соответствующие данные. Модели определены как

App.Vendor = DS.Model.extend(App.Addressable, {
    name: DS.attr('string'),
    currency: DS.belongsTo('currency'),
    paymentTerms: Ds.belongsTo('payment-term')
});

App.Currency = DS.Model.extend({
    currency: string,
    description: string,
    sortOrder: number,
});

App.PaymentTerm = DS.Model.extend({
    term: string,
    description: string,
    sortOrder: number,
});

1 ответ

В конце концов мне пришлось переформатировать мой JSON в следующий формат

{
    "vendors": [
        // vendor objects
    ],
    "currencies": [
        // currency objects
    ],
    "paymentTerms": [
        // paymentTerms objects
    ]
}

После того, как я правильно отформатировал это и произвел рефакторинг моего адаптера, все было просто!

Другие вопросы по тегам