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 ...
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%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.
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%Tags und Links ember.js ember-data