Ember : 1.13.3
Ember Data : 1.13.5
jQuery : 1.11.3
Sto tentando di inviare un carico utile JSON utilizzando i dati ember dal mio client EmberJS al mio server. Voglio inviare l'intero grafico dell'oggetto al server al salvataggio del progetto, poiché non desidero inviare più richieste. Non mi dispiacerebbe inviare richieste multiple, ma sono preoccupato per ciò che accade se una delle richieste non riesce nel mezzo e i dati sul server non saranno corretti.Elementi incorporati di EmberJS nel carico utile JSONAPI
Volevo utilizzare JSONAPI (http://jsonapi.org/format/#document-compound-documents) poiché sta diventando l'adattatore predefinito in Ember. Inoltre, ci sono alcune librerie C# che gestiscono questo formato, quindi ho pensato che sarebbe abbastanza semplice. Tuttavia, dopo aver letto le specifiche, sembra che non possa incorporare oggetti se non hanno un id. EmberJS inoltre non collega gli oggetti figli a JSON neanche se ho specificato { async: false, embedded: 'always' })
su DS.attr.
La mia domanda è: se un'applicazione viene utilizzata in modo tale da creare un grafico oggetto sul lato client, come si usa il formato JSONAPI per inviare l'intero grafico dell'oggetto al server? Devo generare id sul lato client per soddisfare lo standard JSONAPI? Quindi, una volta arrivati al server, li ignorano e vengono salvati con un ID generato dall'ORM?
Ecco il mio modello labelGroup:
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
labels: DS.hasMany('label-model', { async: false, embedded: 'always' })
});
Ecco il mio modello di progetto:
import DS from 'ember-data';
export default DS.Model.extend(DS.EmbeddedRecordsMixin, {
name: DS.attr('string'),
labelGroups: DS.hasMany('labelGroup', { async: false, embedded: 'always'})
});
Qui è il post che ho dopo aver fatto un save() sul progetto:
{
"data":{
"attributes":{"name":"Project"},
"relationships":{
"label-groups":{
"data":[
{"type":"label-groups","id":null},
{"type":"label-groups","id":null},
{"type":"label-groups","id":null},
{"type":"label-groups","id":null},
{"type":"label-groups","id":null},
{"type":"label-groups","id":null},
{"type":"label-groups","id":null}
]
}
},
"type":"label-projects"
}
}
AGGIORNAMENTO: Ho provato a utilizzare https://www.npmjs.com/package/ember-cli-uuid per generare gli ID lato client di cui dispone. Tuttavia i dati che ottengono l'output non includono gli oggetti extra, solo un riferimento ai loro id. Mi aspettavo di vedere una proprietà "inclusa" come specificato qui: http://jsonapi.org/format/#document-compound-documents, ma non è lì.
{
"data":{
"id":"7b4544ee-91cd-493d-8b10-52040e68c283",
"attributes":{"name":"Project"},
"relationships":{
"label-groups":{
"data":[
{"type":"label-groups","id":"08115273-e82a-4d46-93ea-232ce071fb78"},
{"type":"label-groups","id":"9ca94fe9-8077-411e-98d2-1694c6fecce4"},
{"type":"label-groups","id":"d629f1e8-7962-404d-8034-38229ab21f77"},
{"type":"label-groups","id":"c6bda655-5489-4760-847b-bf02239bb2c5"},
{"type":"label-groups","id":"f6fef249-2d1d-43f0-ba64-24b7ff8b5637"},
{"type":"label-groups","id":"a7db25bf-52c8-477b-83e4-64e7c76b072e"},
{"type":"label-groups","id":"f3b5fbb3-261a-4b3d-b481-b9352f8ce2d6"}
]
}
},
"type":"label-projects"
}
}
Ho fatto una piccola ricerca e ho scoperto che JSONAPI non ha ancora una soluzione finale per i record "incorporati" o "inclusi" per le richieste POST o PATCH. https://github.com/lytics/ember-data-model-fragments addon sembra essere un tentativo di fornire quella funzionalità. Lo proverei. – Grapho