获取'自我','下一个'和'上一个'链接(ember v2)

时间:2017-02-24 15:05:07

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

我正在开发一个Ember-js应用程序,我想将每篇“文章”链接到下一篇和前一篇文章。我想根据JSON API工作。

我已设法加载/展示文章的(博客)作者,并加载并显示下一篇(相关)文章的“预告片”。这很好。

现在,下一篇文章应该相当简单:如何加载文章中定义的“链接”?如何将它们添加到我的模型中或在我的Handlebars模板中以任何其他方式显示它们?

让我从我的JSON-repsonse(有效载荷)中提取一下:

{

  "data": {
    "type": "blogs",
    "id": "5",
    "links": {
      "previous": "blogs/4",
      "self": "blogs/5",
      "next": "blogs/6"
    },
    "attributes": {…}, // title, subtitle, bodytext, etc. 
    "relationships": {
        …
      },

最重要的问题是如何从JSON回复中获取此“自我”链接。这些数据可以直接从“模型”中使用吗?

我的模型如下:

//models/blog.js

import DS from 'ember-data';

export default DS.Model.extend({
  nid        : DS.attr('string'),
  title      : DS.attr('string'),
  subtitle   : DS.attr('string'),
  intro      : DS.attr('string'),
  …
  author     : DS.belongsTo('person'),
  next       : DS.attr('next'),
  previous   : DS.belongsTo('person')
});

UPDATE 正如@bungee指出的那样,有效载荷中存在一个错误(针对JSONAPI规范)。 'links'数组应该是'数据'的兄弟,而不是后代。然而,在Ember 2.8中,仍然不会让Ember“吃掉”它。 :)

2 个答案:

答案 0 :(得分:1)

我假设您正在使用数据适配器?如果是这样,您是否创建了与您显示的数据结构相对应的模型。对我而言,它看起来不是标准的余烬休息数据结构,但它取决于您正在使用的适配器。此外,您似乎可以考虑将previous,self和next设置为数据的直接参数..?

答案 1 :(得分:1)

根据Ember社区(Slackware)的帮助,我发现目前这是不可能的:

https://github.com/mharris717/ember-cli-pagination/issues/144

https://emberigniter.com/pagination-in-ember-with-json-api-backend/

回答Bungee的评论:JSON-API(http://jsonapi.org/)指定这些以前的',' self'和' next'链接位于有效负载的根目录下,但我们不能

我们确实可以通过在“数据”下移动它们来解决问题。 →'属性'在有效负载中如果能够存在不遵守JSON-API规范的想法。

顺便说一句:来自JSON-API的引用:

Pagination links MUST appear in the links object that corresponds to a collection. To paginate the primary data, supply pagination links in the top-level links object.

[…]

The following keys MUST be used for pagination links:

    first: the first page of data
    last: the last page of data
    prev: the previous page of data
    next: the next page of data