2014-07-01 10 views
8

La mia applicazione di backend ha diverse risorse. Un modello è esposto per ogni risorsa.Come usare Ember dati con risorse nidificate

Il punto di ingresso a tutte le altre risorse è attraverso il modello User. Quello che voglio dire è, dato un User possiamo trovare BlogPost. Dato un BlogPost possiamo trovare Comments ecc

In Ember terminologia, si potrebbe dire:

User hasMany BlogPost 
BlogPost hasMany Comment 
Comment belongsTo BlogPost 

Con backend espone REST API del modulo:

GET /api/v1/users/1 
GET /api/v1/users/1/blog_posts/1 
GET /api/v1/users/1/blog_posts/1/comments/1 

Sto cercando di capire il modo di utilizzare Ember dati per recuperare Comment appartenente ad un certo BlogPost appartenente ad un certo User.

Da quello che vedo, se mi definisco un modello tipico Ember per Comment:

App.Comment = DS.Model.extend({ 
    ... 
    blogPost: DS.belongsTo('App.BlogPost') 
}); 

e nel CommentRoute Ho il seguente:

var CommentRoute = MessageRoute.extend({ 
    model: function(params) { 
     this.store.find('comment') 
    }, 

La richiesta viene inviata a:

/api/v1/comments 

Non so nemmeno da dove iniziare per Ember Da ta a utilizzare gli URL del modulo:

GET /api/v1/users/1/blog_posts/1/comments/1 

Ho visto diverse domande simili poste (vedi link sotto), ma non ho visto una risposta definitiva a nessuno di essi. La maggior parte di loro sono quasi un anno quando tempora-data, forse, non avevano tale funzionalità (o almeno così si sostiene in alcuni di questi fili).

chiedo ancora una volta di confermare se brace-dati ha tale funzionalità o meno.

Domande simili:

  1. Ember Data nested Models
  2. Canonical way to load nested resources
  3. Deep nested routes

risposta

1

Il modo migliore per gestire la cosa è con i collegamenti. Se non vuoi farlo in questo modo, è tutt'altro che supportato e difficile da hackerare (la pipeline semplicemente non passa facilmente le informazioni in giro). Personalmente suggerirei di arrotolare il tuo adattatore in quel caso (Ember without Ember Data).

App.Foo = DS.Model.extend({ 
    name: DS.attr('string'), 
    bars : DS.hasMany('bar', {async:true}) 
}); 

App.Bar = DS.Model.extend({ 
    foo: DS.belongsTo('foo'), 
}); 

JSON:

{ 
    id: 1, 
    name: "bill", 
    links: { 
    bars: '/foo/1/bars' 
    } 
} 

Esempio: http://emberjs.jsbin.com/OxIDiVU/971/edit

+0

Come funziona l'attributo 'links' aiuto? Possiamo calcolare la rotta direttamente nel modello. – givanse

+0

Mi dispiace, non sono sicuro se capisco cosa stai dicendo.Non sono sicuro se stai mescolando la terminologia ember con la terminologia REST o semplicemente parlando di qualcosa di completamente diverso. Che cosa ha a che fare il modello con l'endpoint del modello? – Kingpin2k

+0

Ciao @ Kingpin2k Sto avendo lo stesso problema. Puoi darci un esempio di come stai usando i link per le risorse annidate. La documentazione non ha dettagli a riguardo. Grazie in anticipo – hasib32

Problemi correlati