2017-02-24 3 views
2

Ich entwickle eine Ember-js-Anwendung, wo ich jeden 'Artikel' mit dem nächsten und vorherigen Artikel verknüpfen möchte. Ich möchte nach der JSON API arbeiten.Get 'self', 'next' und 'previous' Links (ember v2)

Ich habe es geschafft, den (Blog-) Autor des Artikels in einer anständigen zu laden/zu zeigen und einen 'Teaser' des nächsten (verwandten) Artikels zu laden und zu zeigen. Das funktioniert gut.

Jetzt sollte das nächste Stück ziemlich einfach sein: Wie kann ich die 'Links' in meinem Artikel definiert? Wie kann ich sie zu meinem Modell hinzufügen oder in meiner Lenker-Vorlage anders darstellen?

Lassen Sie mich einen Auszug aus meinem JSON-repsonse (die Payload) geben:

{ 

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

Die wichtigste Frage ist, wie diese ‚Selbst‘ Link aus der JSON-Antwort zu erhalten. Können diese Daten direkt aus dem "Modell" verwendet werden?

Mein Modell sieht wie folgt aus:

//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 Wie @bungee weist darauf hin, gibt es ein ein Fehler (gegen die JSONAPI specs) in der Nutzlast. Das Array 'Links' sollte mit 'Daten' übereinstimmen, nicht mit einem Nachkommen. Aber in Ember 2.8 wird das Ember es immer noch nicht "essen" lassen. :)

Antwort

1

Ich nehme an, Sie verwenden einen Datenadapter? Wenn ja, haben Sie ein Modell erstellt, das der von Ihnen angezeigten Datenstruktur entspricht. Für mich sieht das so aus, als wäre das keine Standard-Datenstruktur für Glut-Reste, aber das hängt von dem verwendeten Adapter ab. Es sieht auch so aus, als könnten Sie das vorherige, das selbe und das nächste als direkte Parameter für die Daten verwenden ..?

+0

Vielen Dank für Ihren Vorschlag. Ich habe die Datei mit dem Modell zur Frage hinzugefügt. Ich verwende den Standard-JSONAPIAdapter. Sie sagen, es sieht nicht wie die Standard-Glut-Rest-Datenstruktur aus. Welcher Teil nicht? – Ideogram

+0

Der Link-Parameter sieht nicht wie das Standard-Ember-Rest-Format aus. Ich würde erwarten, dass Links, zum Beispiel eine Eins-zu-viele-Beziehung und einfach ein Array von IDs wie folgt sind: '' 'Links: ['id123987', 'id12308', ...]' ''. Oder wie ich vorgeschlagen habe, nur die Links als direkte Attribute zu den Eltern: {vorherigerLink: "blogs/4", selfLink: "blogs/5", nextLink: "blogs/6"}. Aber kann sein, dass du etwas weißt, was ich nicht weiß. – bungee

+0

Sie haben Recht, dass ich auch falsch darin war, die "vorherigen", "selbst" und "nächsten" Links als direkte Parameter zu den Daten hinzuzufügen. Ihre Eltern, "Links" sollten ein Geschwister von Daten sein. Dann wird es immer noch nicht funktionieren, weil Ember nicht weiß, wie man es verdaut. – Ideogram

1

Basierend auf Hilfe von der Ember-Community (Slackware), fand ich heraus, dass dies nicht möglich ist im Moment:

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

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

Um Bungee Kommentar zu antworten: der JSON-API (http://jsonapi.org/) gibt an, dass diese ‚vorherige‘, ‚selbst‘ und ‚next‘ -Links sollte der Nutzlast unter der Wurzel, aber wir können nicht

Wir können das Problem tatsächlich lösen, indem wir sie unter 'Daten' → 'Attribute' in die Payload verschieben, wenn sie mit der Idee leben können, die JSON-API-Spezifikationen nicht einzuhalten.

By the way: Zitat aus dem 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 
Verwandte Themen