2017-02-24 41 views
2

我正在开发一个Ember-js应用程序,我想将每篇文章链接到下一篇和上一篇文章。我想根据JSON API工作。get'self','next'和'previous'links(ember v2)

我已经设法加载/显示文章的(博客)作者体面和加载和显示下一篇(相关)文章的'传情'。这工作正常。

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

让我举一个exerpt从我的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规格)的有效载荷。 '链接'数组应该是'数据'的兄弟,而不是后代。然而,在Ember 2.8中,这仍然不会让Ember“吃”它。 :)

回答

1

我假设你使用的是数据适配器?如果是这样,您是否创建了与您显示的数据结构相对应的模型?对我来说,它看起来不是一个标准的余烬休息数据结构,但它取决于你使用的适配器。此外,它看起来像你可以考虑设置先前,自我和下一个数据的直接参数..?

+0

感谢您的建议。我已将包含模型的文件添加到问题中。 我使用标准的JSONAPIAdapter。 你说它看起来不像标准的余烬余数据结构。什么部分没有? – Ideogram

+0

links参数看起来不像标准的ember rest格式。我期望的链接是,例如一对多的关系,并简单地是一个id数组,如下所示:'''链接:['id123987','id12308',...]''。或者像我建议的那样,将链接作为父代的直接属性:{previousLink:“blogs/4”,selfLink:“blogs/5”,nextLink:“blogs/6”}。但可以是你知道我没有的东西。 – bungee

+0

你说得对,因为我在将'previous','self'和'next'链接添加为数据的直接参数时也是错误的。他们的父母'链接'应该是数据的兄弟姐妹。然后,它仍然不起作用,因为Ember不知道如何消化它。 – Ideogram

1

基于从灰烬社区(Slackware的)的帮助下,我发现,在目前这是不可能的:

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

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

要回答蹦极的评论:在JSON-API (http://jsonapi.org/)指定这些'先前','自己'和'下一个'链接应该在有效负载的根下,但我们不能

如果我们可以忍受不遵循JSON-API规范的想法,那么我们的确可以通过将它们移动到有效载荷中的'data'→'attributes'下来解决问题。

顺便说一句:报价从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