Wie lädt man die Relationen doestsTo / hasMany in der Route mit EmberJS

8

In meiner EmberJS-Anwendung zeige ich eine Liste von Terminen an. In einer Aktion im AppointmentController muss ich den Terminbesitzer holen, aber der Besitzer gibt immer "undefined" zurück.

Meine Dateien:

models / termination.js

%Vor%

models / person.js

%Vor%

Vorlagen / terminallist.js

%Vor%

controllers / engagementlist.js

%Vor%

controllers / termination.js

%Vor%

Jetzt weiß ich, dass ich die Eigentümereigenschaft in owner: DS.hasMany('person', {async: true}) ändern und dann die von appointment.get('owner'); zurückgegebene Zusage bearbeiten kann, aber das ist nicht das, was ich möchte. Ich habe entdeckt, dass, wenn ich dies {{appointment.owner}} oder dieses {{appointment.owner.name}} in der Vorlage für die Terminliste tue, der Eigentümer-Datensatz vom Server abgerufen wird. Ich denke also, Ember lädt keine Beziehungen, es sei denn, sie werden in der Vorlage verwendet.

Ich denke, dass die Lösung für mein Problem darin besteht, die Route mit der Verabredung zu verwenden, um den Datensatz in der angleTo-Beziehung abzurufen. Aber ich kann nicht herausfinden, wie.

Vielleicht so etwas?

routes / engagementlist.js

%Vor%

BEARBEITEN

Ich habe das getan:

routes / engagementlist.js

%Vor%

und es funktioniert, aber ich mag die Lösung nicht ...

    
Karoline Brynildsen 19.08.2014, 11:10
quelle

3 Antworten

20

Sie laden diese Datensätze immer noch asynchron. Wenn Sie also schnell genug sind, können Sie immer noch undefiniert werden. Es wäre besser, ein Versprechen vom afterModel-Hook zurückzugeben oder einfach den Modell-Hook zu modifizieren, um alles zu tun.

%Vor%

oder

%Vor%     
Kingpin2k 19.08.2014 15:18
quelle
3

Ein anderer Weg ist:

%Vor%

Auf diese Weise wird der Übergang schneller abgeschlossen und die Relationen werden anschließend geladen. Der Ladezustand kann durch loadingRelations beobachtet werden.

Wenn es viele zu ladende Relationen gibt, denke ich, dass dies ein besseres UX ergibt.

    
Tim Baas 07.07.2015 08:37
quelle
1

Sie möchten alle Assoziationen in der Route laden, weil Sie Fastboot für Suchmaschinen und eine bessere Erfahrung beim ersten Öffnen der Site verwenden möchten.

Das Laden von Assoziationen nach dem Laden von primären Modellen ist möglicherweise nicht die beste Entscheidung.

Ich verwende eine Syntax, um alle Assoziationen in der Route zu laden:

%Vor%

Und für dieses .hashPromises habe ich ein Mixin:

%Vor%     
Margus Pärt 04.10.2016 18:23
quelle

Tags und Links