EmberJS eingebettete Elemente in Payload JSONAPI

8
%Vor%

Ich versuche, eine JSON-Nutzlast mit Hilfe von Ember-Daten von meinem EmberJS-Client an meinen Server zu senden. Ich möchte das gesamte Objektdiagramm beim Speichern des Projekts an den Server senden, da ich nicht mehrere Anfragen senden möchte. Ich hätte nichts dagegen, mehrere Anfragen zu senden, aber ich mache mir Sorgen, was passiert, wenn eine der Anfragen in der Mitte fehlschlägt und die Daten auf dem Server nicht korrekt sind.

Ich wollte JSONAPI ( Ссылка ) verwenden, da dies der Standardadapter in Ember wird. Außerdem gibt es ein paar C # -Bibliotheken, die mit diesem Format umgehen, daher dachte ich, es wäre ziemlich einfach. Nach dem Lesen der Spezifikation scheint es jedoch, dass ich Objekte nicht einbetten kann, wenn sie keine ID haben. EmberJS hängt die untergeordneten Objekte auch nicht an den JSON an, obwohl ich { async: false, embedded: 'always' }) auf dem DS.attr angegeben habe.

Meine Frage ist: Wenn eine Anwendung so verwendet wird, dass ein Objektdiagramm auf der Clientseite erstellt wird, wie verwenden Sie das JSONAPI-Format, um das gesamte Objektdiagramm an den Server zu senden? Muss ich auf der Client-Seite IDs generieren, um den JSONAPI-Standard zu erfüllen? Wenn sie dann auf dem Server ankommen, ignorieren sie sie einfach, so dass sie mit einer vom ORM generierten ID gespeichert werden?

Hier ist mein LabelGroup-Modell:

%Vor%

Hier ist mein Projektmodell:

%Vor%

Hier ist der POST, den ich nach dem Speichern () für das Projekt erhalte:

%Vor%

UPDATE: Ich habe versucht, Ссылка zu verwenden, um clientseitige IDs zu erzeugen, die es hat. Die ausgegebenen Daten enthalten jedoch nicht die zusätzlichen Objekte, sondern nur einen Verweis auf ihre IDs. Ich habe erwartet, ein "included" -Eigenschaft wie hier angegeben zu sehen: Ссылка , aber es ist nicht da.

%Vor%     
Asagohan 02.09.2015, 23:57
quelle

1 Antwort

3

Glimmdaten haben keine Unterstützung für das, was Sie gerade wollen. So speichern Glutdaten Ihre Beziehungsdaten nicht in einer sicheren Nutzlast.

Aber das ist möglich, indem Sie einen benutzerdefinierten Adapter und Serializer verwenden. Ich empfehle Ihnen dringend, die API zu checken und sich dann die Quelle anzusehen.

Wenn Sie .save() auf Ihrem Modell aufrufen, wird die Methode createRecord auf Ihrem Adapter aufgerufen. Hier wird serializeIntoHash auf dem Serializer aufgerufen, um das Model zu serialisieren.

serializeIntoHash ruft serialize auf, wobei serializeBelongsTo und serializeHasMany aufgerufen wird.

Jetzt können Sie serializeHasMany einfach überschreiben und hasMany vor der Zeile ändern:

%Vor%

Hier haben Sie den Typ und die IDs, wie sie von ember-data gesendet werden. Sie könnten einfach .forEach die Daten auf der hasMany und dann holen Sie den Speicher für die Daten und bauen Sie Ihre included -Array.

Ich hoffe, das hilft Ihnen, den Serializer und den Adapter zu verstehen, so dass Sie ihn so modifizieren können, dass Sie alles tun können, was Sie wollen. Eigentlich ist das der beste Teil über Glutendaten. Die Struktur des Adapters und des Serialisierers, die einfache Modifikationen ermöglicht.

    
Lux 26.01.2016, 14:55
quelle

Tags und Links