2013-03-04 17 views
7

Quindi sto avendo (quello che penso sia) un problema generale con dati di taglio. Mi chiedo come personalizzare correttamente l'adattatore per adattarsi alla seguente situazione.Sottosezioni con emberjs + ember-data

Fingere Ho due oggetti: Post e Tag

Calling App.Post.find() restituisce tutti i messaggi di GET ing api.com/posts, App.Post.find(1) si trova in api.com/posts/1. Questo è buono.

App.Tag.find() restituirà tutti i tag disponibili a api.com/tags. App.Tag.find(1) restituirà il tag appropriato nell'URL corretto. Anche buono.

Se creo nuovi messaggi tramite App.Post.createRecord({...}) L'indirizzo POST sarà corretto. Lo stesso vale per la creazione di Tags. Finora tutto è dandy.

Tags su un Post sono incorporati perché sono "su" quel post.

App.Adapter.map("App.Post", { 
    tags: {embedded: 'always'} 
}); 

Durante il caricamento, Ember-data fa tutto bene e sono ancora super felice.

Quindi il mio problema deriva dall'aggiunta di Tag a Post. Vorrei PUT o POST l'oggetto tag su api.com/posts/1/tags dove il server farà tutte le cose sul lato server.

Attualmente,

  1. Ember-dati, con il set {embedded: 'always'} config, invierà un PUT-api.com/posts/1 con l'intero Post oggetto (con il nuovo Tag oggetto incluso) come una stringa in stringa JSON.

  2. Senza il set {embedded: 'always'} config, Tizzone-dati cercherà di PUT l'oggetto tag per api.com/tags e invierà nell'oggetto Tag con un parametro post_id modo che il lato server può fare tutte le cose lato server.

Preferisco non farlo 1 perché il mio server non è impostato in questo modo. Preferirei non fare 2 perché PUT/POST/GET s su api.com/tags dovrebbe essere davvero per la parte "Gestione tag" della mia applicazione, e non realmente applicare tag ai post. Un altro esempio di questo comportamento è nello Github v3 API for Labels & Issues.

Qualcuno sa di un modo di gestirlo con i dati ember? Grazie!

+0

Avere lo stesso identico problema che abbiamo ragionato allo stesso modo - sembra avere poco senso dal momento che Ember è RESTFul, no? – andreimpop

+0

Hey @andreimpop Ho finito con l'uso di embedded: "load", la nostra propria ajax per il commit sul server, e ho manipolato manualmente la macchina dello stato di ember-data. Tutto ciò è impressionante - ho intenzione di rifarlo quando questo diventa vero: http://emberjs.com/blog/2013/03/22/stabilizing-ember-data.html –

risposta

1

È possibile prendere in considerazione l'override della funzione RESTAdapter # dirtyRecordsForHasManyChange per gestire la modalità di trattamento dei tag durante la transazione.

Ma è un po 'di confusione che non si abbiano relazioni incorporate, tuttavia non si desidera eseguire PUT sui tag durante le modifiche alla relazione del modello Post. Non sono sicuro di vedere il problema con il comportamento dell'adattatore out-of-the-box.

+0

Grazie ... Non sono sicuro di capire la parte confusa però. Ho relazioni incorporate ... Funzionano perfettamente sul carico. Vorrei solo aggiungere Tag a un post come github aggiunge etichette ai problemi. Vedi: http://developer.github.com/v3/issues/labels/#add-labels-to-an-issue –

+0

Spiacente. Ora capisco. Dovrai sovrascrivere un po 'di JSONSerializer # addHasMany e forse anche JSONSerializer # addBelongsTo. Ma dal momento che lo stai facendo in questo modo provoca confusione su quale modello è sporco (da impegnare). Si potrebbe finire per scavare abbastanza in profondità e possibilmente creare il proprio adattatore. – clintjhill

+0

Ehi @clintjhill, non essere dispiaciuto! Apprezzo molto il vostro aiuto! Grazie ancora per aver fatto luce –

Problemi correlati