отношения hasMany со ссылками JSON

Я пытаюсь создать динамический вызов REST в своем приложении Ember. Я пытался использовать это решение в качестве отправной точки, но оно не работает, и я не уверен, что это связано с тем, что Ember теперь использует JSON API, и я неправильно его структурирую: Динамический сегмент в адаптере данных ember

В бэкенде вызов выглядит как /posts/{postID}/comments, и я хочу иметь возможность динамически получать комментарии к сообщениям с идентификаторами 1, 2, 3 и т. д...

Вот моя базовая структура
Почтовая модель:

export default DS.Model.extend({
  name: DS.attr('string'),
  comments: DS.hasMany('comment', {async:true})
});

Модель комментария:

export default DS.Model.extend({
  name: DS.attr('string')
});

Шаблон:

<ul>
  {{#each model as |post|}}
    {{#each post.comments as |comment|}}
      <li>{{comment.name}}</li>
    {{/each}}
  {{/each}}
</ul>

Полезная нагрузка Json Post:

  "data": [{
    "type": "posts",
    "id": "1",
    "attributes": {
      "id": 1
      "name": "my title"
    },
    "links": {
      "comments": "comments"
    }
  }]

Моя цель состоит в том, чтобы вызвать комментарии для создания пространства имен, похожего на /posts/1/comments, с использованием приведенного выше шаблона. Я возвращаю пост-модель и проверяю, что первый цикл {{#each}} работает, но вызов post.comments ничего не делает в шаблоне.


person PlainPat    schedule 29.02.2016    source источник
comment
Похоже, вам не хватает belongsTo guides.emberjs. com/v2.3.0/models/relationships/#toc_one-to-many   -  person Patrick Berkeley    schedule 01.03.2016
comment
это не повлияло к сожалению   -  person PlainPat    schedule 01.03.2016
comment
На это уже есть ответ?   -  person Oh Chin Boon    schedule 22.05.2017


Ответы (2)


Ваша полезная нагрузка не подтверждает JSON API. Поскольку comments является отношением post, полезная нагрузка должна выглядеть примерно так:

"data": [{
  "type": "posts",
  "id": "1",
  "attributes": {
    "id": 1,
    "name": "my title"
  },
  "relationships": {
    "comments": {
      "links": {
        "related": "/posts/1/comments"
      }
    }
  }
}]

Прочтите здесь, чтобы получить дополнительную информацию об отношениях JSON API.


Примечание. Способ построения полезной нагрузки работает со старым Сериализатор REST.

person Jacob van Lingen    schedule 11.05.2016

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

Во-первых, из того, что вы здесь показали, не похоже, что вы загрузили какие-либо комментарии в модель.

Ваша полезная нагрузка, вероятно, должна выглядеть примерно так:

"data": [{
  "type": "posts",
  "id": "1",
  "attributes": {
    "id": 1
    "name": "my title"
  },
  "relationships": {
    "comments": {
      "data": [
        {
          "id": "3",
          "name": "comment"
        }
      ]
    }
  }
}]
person Kyle Mellander    schedule 29.02.2016
comment
Это работает, но не выполняет то, что я пытаюсь сделать. Доступ к этим данным приведет к вызову серверной части для каждого идентификатора комментария в массиве данных. Я ищу один звонок, чтобы получить все мои комментарии. Вместо /post/1/comments/1 я хочу /post/1/comments, который, как я понимаю, должен работать с атрибутом links - person PlainPat; 01.03.2016