与JSON链接有很多关系

时间:2016-02-29 22:32:11

标签: ember.js ember-cli json-api

我试图在我的ember应用中构建动态REST调用。我试图使用此解决方案作为起点,但它不起作用,我不确定它是否是因为Ember现在正在使用JSON API并且我构造错误: Dynamic segment in ember data adapter

在后端,通话看起来像/posts/{postID}/comments,我希望能够动态地从ID 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 Payload:

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

我的目标是调用注释,使用上面的模板构建一个类似于/posts/1/comments的命名空间。我收回了帖子模型,并确认第一个{{#each}}循环有效,但对post.comments的调用在模板中没有任何作用。

2 个答案:

答案 0 :(得分:2)

您的有效负载未确认JSON API。由于commentspost的关系,因此有效负载应如下所示:

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

阅读here以获取有关JSON API关系的更多信息。

N.B。构建有效负载的方式适用于旧的RESTSerializer

答案 1 :(得分:0)

这假设您有权更改有效负载响应。如果没有,您将不得不使用序列化程序来按摩数据。

首先,根据您在此处显示的内容,您似乎没有将任何评论加载到模型中。

您的有效负载应该看起来像这样:

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