Ich benutze 3.0.0-rc.4 von Js-Daten und ich brauche mehrere Modelle von einem einzigen Aufruf an die Back-End-API laden. Ich baue immer noch das Backend und würde es vorziehen, in der Lage zu sein, alle Daten von den verschiedenen Tabellen gleichzeitig zu erhalten, anstatt mehrere Anrufe zu verschiedenen Endpunkten zu machen.Js-Daten mehrere Modelle in einer einzigen Route
Antwort
Sie können. Sagen Sie, die Route, die Ihre Webanwendung laden soll, ist/posts/123, und Sie müssen Post # 123 und seine Kommentare laden, die sich in zwei verschiedenen Tabellen befinden. In Ihrem clientseitigen App können Sie so etwas wie
store.find('post', 123)
oder sogar
store.find('post', 123, { params: { with: 'comment' } })
tun, die eine GET-Anforderung an so etwas wie /post/123
und /post/123?with=comment
jeweils machen.
Ihr Backend kann mit dem Post-Datensatz mit eingebetteten Kommentaren antworten, und solange Sie JSData von der Beziehung zwischen Posts und Kommentaren berichten, werden sie jeweils im rechten Teil des In-Memory-Speichers zwischengespeichert. Zum Beispiel:
store.defineMapper('post', {
relations: {
hasMany: {
comment: {
localField: 'comments',
foreignKey: 'post_id'
}
}
}
});
store.defineMapper('comment', {
relations: {
belongsTo: {
post: {
localField: 'post',
foreignKey: 'post_id'
}
}
}
});
Sie tun:
store.find('post', 123)
Ihr Backend antwortet mit:
{
"id": 123,
// ...
}
Sie tun:
store.find('post', 123, { params: { with: 'comment' } })
Ihr Backend antwortet mit:
{
"id": 123,
// ...,
comments: [
{
"id": 14323,
"post_id": 123,
// ...
},
// ...
]
}
Wenn Sie Node.js + JSData im Backend verwenden, als https://github.com/js-data/js-data-express zu überprüfen, die die Abfragezeichenfolgeflag correctlly analysieren kann und alle die Express Routen für alle Ihre Mapper generieren. Mit js-data-express kann Ihr Backend genau auf die Anfragen antworten, wie ich in meinen obigen Beispielen angegeben habe.
Sobald Sie Daten in den In-Memory-Speicher geladen, Ihre View-Komponente die Daten ziehen kann es aus dem In-Memory-Speicher angezeigt werden muss:
Get Post # 123 aus der In-Memory Speicher:
store.get('post', 123)
die Kommentare zu Post # 123 aus dem Laden in-memory-Adresse:
store.getAll('comment', 123, { index: 'post_id' })
Wenn Sie die DataStore
Komponente verwenden, dann die Kommentare shou der Post ld auch auf dem Post-Datensatz selbst verfügbar sein, z. post.comments
.
- 1. Mehrere Modelle in einer einzigen Ansicht anzeigen
- 2. Feinabstimmung erfrischend mehrere Modelle in Ember Route
- 3. Ember.js: mehrere Ajax-Aufrufe in einer einzigen Route
- 4. mehrere Routen in einer einzigen Route :: get() Call Laravel 4
- 5. Render mehrere Modelle in OpenGL mit einem einzigen Zeichenaufruf
- 6. Mehrere NFTs in einer einzigen Szene
- 7. Schienen - Benutzereingabe für mehrere Modelle in einem einzigen Formular - Wie
- 8. Mehrere MVC-Projekte in einer einzigen Lösung
- 9. eckig 2 aktive Route ist auf einer einzigen Route
- 10. Sails.js mehrere Controller/Modelle zu einer Ansicht
- 11. Django mehrere Modelle in einer Vorlage anzeigen
- 12. Mehrere Modelle in einer Ansicht ASP.Net
- 13. , wie mehrere Modelle in einer Schiene Form
- 14. Mehrere JSON-Modelle in einer Ansicht binden
- 15. Wie mehrere Modelle in einer Form bearbeiten?
- 16. Mehrere Route Argument Muster in einer Route in Laravel 5.2
- 17. mehrere Zeilen einer einzigen Tabelle
- 18. Mehrere Tabellenansichten in einer einzigen Ansicht steuern
- 19. Mehrere SQL-Abfragen in einer einzigen Tabelle
- 20. Rails: Mehrere Optionen in einer einzigen Zeichenfolge
- 21. Mehrere Akkordeons in einer einzigen Seite
- 22. Mehrere Maven-Repositories in einer einzigen Datei
- 23. Mehrere Wiederholungen in einer einzigen Regel
- 24. mehrere Datensätze in einer einzigen Zeile
- 25. Mehrere Einsätze in einer einzigen SQL-Anweisung
- 26. Mehrere Zählungen in einer einzigen SQL-Abfrage
- 27. Mehrere Funktionen in einer einzigen Taste
- 28. MySQL mehrere Schlüssel in einer einzigen Zeile
- 29. Mehrere ng-repeat in einer einzigen Ansicht
- 30. , wie mehrere Benutzernamen in einer einzigen Abfrage
große Antwort! Ich habe jedoch noch eine Follow-up-Frage. Js-data ist also schlau genug, um die Mehrzahl der empfangenen Daten aufzulösen, da das Speicherobjekt im Beispiel "Kommentar" ist, das empfangene verschachtelte Feld jedoch "Kommentare"? – jredd
JSData weiß anhand der Einstellung "localField" in der Beziehungsdefinition, welches Feld die eingebettete Beziehung ist. – jdobry