EmberJS: Wie lade ich mehrere Modelle auf derselben Route?
Während ich bin nicht neu auf dem web-Entwicklung, ich bin ziemlich neu auf client-side MVC-frameworks. Ich habe einige nachforschungen und beschlossen, give it a go mit EmberJS. Ich ging durch die TodoMVC Führung und es machte Sinn für mich...
Ich habe setup eine sehr einfache app; index route, zwei Modelle und eine Vorlage. Ich habe eine server-seitige php-Skript ausführen, gibt einige db-Zeilen.
Eine Sache, die ist sehr verwirrend, mir ist so laden Sie mehrere Modelle auf der gleichen route. Ich habe einige Informationen über die Verwendung einer setupController aber ich bin immer noch unklar. In meinem template habe ich zwei Tabellen, die ich versuche zu laden mit nicht verwandten db-Zeilen. In einer eher traditionellen web-app hätte ich mir nur ausgestellt, um sql-Anweisungen und geloopt über Sie füllen die Zeilen. Ich habe Schwierigkeiten mit der übersetzung dieses Konzept zu EmberJS.
Wie lade ich mehrere Modelle von unzusammenhängenden Daten auf der gleichen route?
Ich verwende die neueste Ember und Ember-Data libs.
Update
obwohl die erste Antwort gibt eine Methode für den Umgang, die zweite Antwort erklärt, Wann es angebracht ist und die verschiedenen Methoden, wenn es nicht angemessen ist.
InformationsquelleAutor der Frage Eric | 2013-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Ember.Zu-oder absagen.hash laden mehrere Modelle:
app/routes/index.js
Und in Ihre Vorlage können Sie finden
people
undcompanies
um die geladenen Daten:app/templates/index.js
Dies ist ein Twiddle auf dieses Beispiel: https://ember-twiddle.com/c88ce3440ab6201b8d58
InformationsquelleAutor der Antwort Marcio Junior
VORSICHT:
Möchten Sie vorsichtig sein, über den ob oder nicht zurückgeben mehrerer Modelle im Modell von Haken angebracht ist. Fragen Sie sich selbst diese einfache Frage:
:id
? alsothis.resource('foo', {path: ':id'});
Wenn Sie mit ja beantwortet
Versuchen Sie nicht, laden Sie verschiedene Modelle aus dem Modell-Haken in dieser route!!! Der Grund liegt in der Art und Weise Ember Griffe Verknüpfung zu Routen. Wenn Sie ein Modell, wenn Sie einen Link zu dieser Strecke (
{{link-to 'foo' model}}
,transitionTo('foo', model)
) springt das Modell Haken und verwenden Sie das mitgelieferte Modell. Dies ist wahrscheinlich problematisch, da Sie voraussichtlich mehrere Modelle, aber nur ein Modell ausgeliefert wird. Hier ist eine alternative:Tun es in
setupController
/afterModel
Beispiel: http://emberjs.jsbin.com/cibujahuju/1/edit
Wenn Sie es brauchen, um blockieren den übergang (wie das Modell hook macht) zurückzukehren ein Versprechen aus der
afterModel
Haken. Sie benötigen, um manuell verfolgen Sie die Ergebnisse aus, dass die Haken und Haken Sie Sie bis zur Steuerung.Beispiel: http://emberjs.jsbin.com/diqotehomu/1/edit
Wenn Sie keine Antwort
Go ahead, lassen Sie uns zurück, mehrere Modelle von der route ist das Modell hook:
Beispiel: http://emberjs.jsbin.com/tuvozuwa/1/edit
Wenn es etwas braucht, bedient zu werden (wie ein Aufruf an den server, eine Art Versprechen)
Beispiel: http://emberjs.jsbin.com/xucepamezu/1/edit
In der Fall of Ember-Daten
Beispiel: http://emberjs.jsbin.com/pekohijaku/1/edit
Wenn man ein Versprechen, und der andere nicht, es ist alles gut, melde dich gerne-nutzen Sie einfach den Wert
Beispiel: http://emberjs.jsbin.com/coxexubuwi/1/edit
Mix und match und viel Spaß!
Beispiel: http://emberjs.jsbin.com/joraruxuca/1/edit
InformationsquelleAutor der Antwort Kingpin2k
Ich so etwas wie die Antwort, Marcio zur Verfügung gestellt, aber es sieht wie folgt aus:
InformationsquelleAutor der Antwort la_antorcha
Wenn Sie mit Ember-Data, wird es sogar noch einfacher für unabhängige Modelle:
Wenn Sie nur wollen, um eine Objekt-Eigenschaft für
model2
verwenden DS.PromiseObject statt DS.PromiseArray:InformationsquelleAutor der Antwort AWM
Die neueste version von JSON-API umgesetzt, in Ember Data v1.13 unterstützt die Bündelung der verschiedenen Ressourcen, die in die gleiche Anforderung sehr gut, wenn Sie nichts dagegen haben, ändern Sie Ihr API-Endpunkte.
In meinem Fall habe ich eine
session
Endpunkt. Die Sitzung bezieht sich auf einen Benutzer-Datensatz und der Benutzer-Datensatz bezieht sich auf verschiedene Modelle, ich will immer geladen zu allen Zeiten. Es ist ziemlich nett für Sie alle ein: kommen Sie in mit der eine Anfrage.Einer Einschränkung gemäß der spec ist, dass alle Entitäten aus, die Sie zurückgeben sollte irgendwie eine Verbindung zu der primären Entität empfangen werden. Ich glaube, dass ember-Daten werden nur dann Durchlaufen die expliziten Beziehungen, wenn die Normalisierung der JSON.
Anderen Fällen, bin ich jetzt die Wahl zu verzögern das laden von zusätzlichen Modellen, bis die Seite bereits geladen ist, d.h. für separate Platten für Daten oder was auch immer, so zumindest die Seite gerendert wird, so schnell wie möglich. Dies zu tun, es gibt einige Verlust/änderung mit der "automatischen" Fehler beim laden des Status, werden berücksichtigt.
InformationsquelleAutor der Antwort aceofspades