Zugriff auf das übergeordnete Routenmodell in Ember.js

8

Ich versuche eine Route zu schreiben, die Zugriff auf das Elternmodell benötigt. Ich verwende this.modelFor() , aber wenn ich das tue, ist das Elternmodell nicht vollständig geladen, so dass alle seine Eigenschaften null enthalten.

Dies ist der Router mit zwei dynamischen Segmenten:

%Vor%

Das ist meine GameRoute, die perfekt funktioniert:

%Vor%

Und schließlich ist dies die Kinderroute, die Zugriff auf das Spielmodell benötigt, und das ist, was ich geschrieben habe. Aber egal was ich mache, die console.log() gibt immer null aus. Wenn ich die Variable game überprüfe, ist die Eigenschaft isLoad immer Null:

%Vor%

Tue ich etwas falsch oder (wie ich vermute) fehlt mir ein Ember-Konzept?

    
César García Tapia 07.07.2013, 19:13
quelle

1 Antwort

6

Dieser Teil Ihres Codes sieht gut aus. Ihre Annahmen sind insofern richtig, als die verschachtelte Route das Modell des Elternteils über modelFor erhalten soll.

Ich vermute, dass Ihre Suchmethode die Ursache des Fehlers ist. Ich habe mir deine vorherige Frage angeschaut und gehe davon aus Game.find wird hier verwendet (?)

Das Problem liegt in Promises . Embers Router versteht die asynchrone Natur des model Hooks. Aber es hängt davon ab, dass du Promise zurückschickst, um seine Arbeit zu erledigen. Derzeit verwenden Sie die jQuery-Zusage, geben das Objekt game jedoch sofort im nicht initialisierten Status zurück. Die Abfrage wird vom Server geladen, aber der model() -Hook wird vermutlich vor diesem Ereignis aufgelöst.

Sie möchten die jQuery Promise direkt von Ihrem model hook zurückgeben. + Führen Sie die Analyse in der ersten then durch und geben Sie diese als Ergebnis zurück.

Hier ist Ihre modifizierte Game.find . Die gleichen Prinzipien gelten auch für die anderen Finder.

%Vor%

Beachten Sie, dass das Spielobjekt unverändert zurückgegeben wird. Ember versteht, dass das Ergebnis, wenn das Versprechen gelöst wird (indem etwas anderes als ein Versprechen zurückgegeben wird), das Modell für den model() -Hook ist. Dieses game -Objekt ist das Modell, das jetzt in modelFor in der verschachtelten Route verfügbar sein wird.

    
Darshan Sawardekar 08.07.2013, 03:08
quelle

Tags und Links