Beim Erstellen einer EmberJS-Anwendung kann es erforderlich sein, mehrere Modelle unabhängiger Daten in eine einzige Route zu laden . Diese Frage befasst sich mit den geeigneten Ansätzen für eine solche Aufgabe.
Bevor Sie mit dem Ladevorgang beginnen, müssen Sie unbedingt feststellen, ob die Rückgabe mehrerer Modelle im Modell-Hook gerechtfertigt ist. Von diesem Ansatz wird dringend abgeraten, wenn eine Route dynamische Daten basierend auf einem URL-Slug lädt (z. B. this.resource('foo', {path: ':id'})). Wenn Sie unter solchen Bedingungen versuchen, mehrere Modelle zu laden, können beim Verknüpfen mit der Route möglicherweise Probleme auftreten. Ember umgeht den Modell-Hook und verwendet das beim Verknüpfen bereitgestellte Modell, was zu inkonsistentem Verhalten führt, da Sie erwartet haben, mehrere Modelle abzurufen, aber nur eines erhalten haben.
Beim Laden mehrerer Modelle Ziehen Sie bei einer Route, bei der der Modell-Hook-Ansatz ungeeignet ist, die folgenden Alternativen in Betracht:
Im setupController/afterModel-Hook: Laden Sie die zusätzlichen Modelle im setupController- oder afterModel-Hook. Mit diesem Ansatz können Sie die Ergebnisse bei Bedarf manuell an Ihren Controller anschließen. Beachten Sie jedoch, dass Sie, damit dies funktioniert, ein Versprechen vom afterModel-Hook zurückgeben müssen, wenn dieser den Übergang blockieren muss, wie es der Model-Hook tut.
App.IndexRoute = Ember.Route.extend({ model: function(params) { return $.getJSON('/books/' + params.id); }, setupController: function(controller, model) { // Load additional model and set it on the controller controller.set('model2', { bird: 'is the word' }); } });
Im Model-Hook von Route: Wenn mehrere unabhängige Modelle geladen werden müssen und die Route keine dynamischen Daten lädt, kann der Modell-Hook verwendet werden.
App.IndexRoute = Ember.Route.extend({ model: function() { return { model1: ['red', 'yellow', 'blue'], model2: ['green', 'purple', 'white'] }; } });
Versprechen verwenden: Wenn das Laden von Modellen asynchrone Anforderungen beinhaltet ( B. Serveraufrufe), verwenden Versprechen, um diese Vorgänge aufzulösen und die resultierenden Modelle im Modell-Hook zurückzugeben.
App.IndexRoute = Ember.Route.extend({ model: function() { return Ember.RSVP.hash({ model1: promise1, model2: promise2 }); } });
Das obige ist der detaillierte Inhalt vonWie lade ich mehrere unabhängige Modelle in einer einzelnen EmberJS-Route?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!