2017-02-24 40 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