Heim  >  Artikel  >  Web-Frontend  >  Wie lade ich mehrere unabhängige Modelle in einer einzelnen EmberJS-Route?

Wie lade ich mehrere unabhängige Modelle in einer einzelnen EmberJS-Route?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 12:59:02136Durchsuche

How to Load Multiple Unrelated Models in a Single EmberJS Route?

EmberJS: Laden mehrerer unabhängiger Modelle in einer einzigen Route

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.

Überlegungen

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.

Alternativen zum Laden von Modell-Hooks

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn