Почему отношение hasMany создает запрос OPTIONS и GET для каждого элемента отношения? - PullRequest
1 голос
/ 27 июня 2019

У меня сейчас есть такой ответ от моего API:

{
  "data": [{
      "attributes": {
        "customer_name": "The Name",
      },
      "id": 1,
      "relationships": {
        "tasks": {
          "data": [{
              "attributes": {
                "name": "The task",
              },

            ]
          }
        },
        "type": "customer"
      }
    ]
  }

И Эмбер загружает модель правильно. Однако, когда я пытаюсь использовать вычисленное свойство, которое создает отношение, Ember инициирует OPTIONS и последующий запрос GET для каждого элемента в отношении.

Я не работал с такими отношениями раньше, так что это может быть ожидаемое поведение, но я немного запутался.

Если он собирается сделать запрос для каждого, зачем вообще отправлять элементы как часть оригинальной модели через отношения? Почему бы просто не сделать нормальный поиск модели, который, вероятно, будет гораздо быстрее.

Это кажется действительно расточительным, так что я подозреваю, что я не обращаюсь с чем-то или неправильно понимаю, я был бы признателен за любую проницательность.

1 Ответ

3 голосов
/ 27 июня 2019

Это ожидаемое поведение для того, что вы делаете (доступ к hasMany отношению).В вашем примере задачи не существуют в хранилище Ember Data, поэтому при попытке получить к ним доступ Ember Data достаточно умен, чтобы получить их для вас из вашего API.При этом он отправляет запросы OPTIONS и GET для их получения.Запрос OPTIONS - это просто запрос предварительной проверки .

Если вы хотите работать с этой конкретной моделью и с ее задачами (или другими hasMany моделями отношений) без выполнениятак много сетевых запросов, вы можете получить оба одновременно, запрашивая их с include, предполагая, что вы используете адаптер, который позволяет это (то есть поддерживает спецификацию JSON API ), и ваш API тоже:

// for example, fetching a post with its comments (hasMany relationship)
this.store.findRecord('post', params.post_id, { include: 'comments' } );

При этом должна быть возвращена модель и ее задачи в одном сетевом запросе.Для дальнейшего чтения я бы ознакомился с руководством Эмбер по Отношения .

...