Heim > Web-Frontend > js-Tutorial > Wie lade ich mehrere Modelle auf derselben Route in EmberJS?

Wie lade ich mehrere Modelle auf derselben Route in EmberJS?

Barbara Streisand
Freigeben: 2024-11-02 06:09:02
Original
399 Leute haben es durchsucht

How to Load Multiple Models on the Same Route in EmberJS?

Laden mehrerer Modelle auf derselben Route in EmberJS

In EmberJS ist es manchmal notwendig, mehrere nicht verwandte Modelle in eine einzige Route zu laden . Dieses Konzept kann für Neulinge in clientseitigen MVC-Frameworks verwirrend sein. Zur Verdeutlichung bietet dieser Leitfaden eine detaillierte Erläuterung, wie mit diesem Szenario umzugehen ist und welche Vorgehensweise basierend auf der Abhängigkeit der Route von URL-Parametern angemessen ist.

Überlegungen zur Rückgabe mehrerer Modelle

Bevor mehrere Modelle im Modell-Hook zurückgegeben werden, ist es wichtig zu bestimmen, ob die Route dynamische Daten basierend auf einem Slug :id in der URL lädt. Wenn die Antwort „Ja“ lautet, sollte das Laden mehrerer Modelle vom selben Hook vermieden werden. Dies liegt daran, dass Sie mit dem Verknüpfungsmechanismus von Ember beim Übergang zur Route ein Modell angeben können, das den Modell-Hook umgeht und stattdessen das bereitgestellte Modell verwendet. Dies könnte zu Problemen führen, da Sie mehrere Modelle erwarten würden, aber nur eines verfügbar wäre.

Alternativer Ansatz, wenn die Route dynamische Daten lädt

Wenn die Route dynamisch geladen wird Um Daten basierend auf einem URL-Parameter zu erstellen, wird empfohlen, mehrere Modelle mit setupController/afterModel anstelle des Modell-Hooks zu laden.

Mit SetupController können Sie das Modell ändern, bevor der Controller erstellt wird. Damit können Sie dem Controller weitere Modelle hinzufügen. Zum Beispiel:

App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return $.getJSON('/books/' + params.id);
  },
  setupController: function(controller, model){
    this._super(controller,model);
    controller.set('model2', {bird:'is the word'});
  }
});
Nach dem Login kopieren

Mit AfterModel können Sie alle asynchronen Vorgänge ausführen, nachdem ein Modell geladen wurde. Sie können damit zusätzliche Modelle laden und Ember-Versprechen verwenden, um die asynchronen Anfragen zu verwalten. Zum Beispiel:

App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return $.getJSON('/books/' + params.id);
  },
  afterModel: function(){
    var self = this;
    return $.getJSON('/authors').then(function(result){
      self.set('authors', result);
    });
  }, 
  setupController: function(controller, model){
    this._super(controller,model);
    controller.set('authors', this.get('authors'));
  }
});
Nach dem Login kopieren

Mehrere Modelle zurückgeben, wenn die Route keine dynamischen Daten lädt

Wenn die Route keine dynamischen Daten basierend auf einem URL-Parameter lädt können Sie fortfahren und mehrere Modelle aus dem Modell-Hook der Route zurückgeben. Die Syntax ist unkompliziert:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return {
           model1: ['red', 'yellow', 'blue'],
           model2: ['green', 'purple', 'white']
    };
  }
});
Nach dem Login kopieren

Wenn das Laden des Modells Versprechen beinhaltet, können Sie Ember RSVP verwenden, um die asynchrone Natur der Anfragen zu verarbeiten. Verwenden Sie beispielsweise Ember Data:

App.IndexRoute = Ember.Route.extend({
  var store = this.store;
  model: function() {
    return Ember.RSVP.hash({
           cats: store.find('cat'),
           dogs: store.find('dog')
    });
  }
});
Nach dem Login kopieren

Dieser Ansatz ermöglicht es Ihnen, mehrere Modelle gleichzeitig zu laden und sie als ein einzelnes Objekt in der Vorlage zu behandeln.

Das obige ist der detaillierte Inhalt vonWie lade ich mehrere Modelle auf derselben Route in EmberJS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage