2013-08-02 3 views
13

Angenommen, Sie haben die folgenden Routen in einer Ember-Anwendung.Wie verlinkt man zu verschachtelten Ressourcen in Ember.js?

App.Router.map(function() { 
    this.resource('series', function() { 
    this.resource('serie', { path: '/:serie_id' }, function() { 
     this.resource('seasons', function() { 
     this.resource('season', { path: '/:season_id' }, function() { 
      this.resource('episodes', function() { 
      this.resource('episode', { path: '/:episode_id' }); 
      }) 
     }); 
     }); 
    }); 
    }); 
}); 

Wie würde ich zu verknüpfen eine bestimmte Folge die linkTo Helfer verwenden, die Lenker bietet? Mit anderen Worten, wie findet Ember heraus, was die anderen Parameter der URL sein sollten, das heißt, serie_id und episode_id? Die Dokumentation besagt, dass ich ein Modell an die episode Route wie unten gezeigt übergeben sollte.

{{#linkTo "episode" episode}} 

Dies ist mit der folgenden URL-Struktur zu verknüpfen.

/series/:serie_id/seasons/:season_id/episodes/:episode_id/ 

Als ich den linkTo Helfer wie das verwenden, wirft Ember einen Fehler mir zu sagen, dass es nicht get mit id auf undefined aufrufen können. Ich nehme an, dass es das Modell verwendet, um herauszufinden, was die serie_id und episode_id sind, und meine Vermutung ist, dass das Modell einer bestimmten Konvention (Struktur oder Bauplan) für Ember entsprechen muss, um diese id s zu finden.

Das sind die Aspekte, die ich an Ember am schwierigsten finde. Es ist nicht sehr transparent, auch wenn Sie Ember im Debug-Modus verwenden. Alle Hinweise oder Referenzen werden sehr geschätzt.

UPDATE 1: Nach einigen Graben, fand ich, dass die Methode des serialize Weges aus einem Schlüsselelement ist dies bei der Verwirklichung. Wenn ich jedoch den linkTo -Helfer wie oben beschrieben verwende, ist das Modell undefined aus 0 Gründen die Route (obwohl es nicht an die linkTo Helfer übergeben wird. Die Frage, die zu dieser Entdeckung führte finden Sie here.

UPDATE 2: es stellt sich heraus, dass die serialize Methode des serieSeason Weg, eine Episode statt einer Saison das falsche Modell erhält, wenn der Link erzeugt wird es ist nicht klar, aber warum ist es die falsche erhalten. Modell. Woher kommt der model Parameter der serialize Methode?

UPDATE 3: Der linkTo Helfer funktioniert einwandfrei, wenn ich statische Daten von der serialize Methode jeder beteiligten Route zurückgeben, was bedeutet, dass der linkTo Helfer an dem Problem nicht beteiligt ist.

Antwort

24

Es stellt sich heraus, dass die Antwort in der ordnungsgemäß dokumentierten Quelle von Ember gefunden werden kann ... denn das ist, was man tut, nachdem man mehrere Tage im Internet gesucht hat.

Die Antwort ist einfach. Der Helper linkTo akzeptiert mehr als ein Modell. Für jedes dynamische Segment der Ziel-URL übergeben Sie ein entsprechendes Modell. Jedes übergebene Modell wird zum Modell der entsprechenden Route in der Ziel-URL. In dem Beispiel, das ich oben beschrieben habe, ergibt sich folgendes.

{{#linkTo "episode" serie season episode}} 

Das serie Modell auf die serie Strecke übergeben wird, das season Modell auf die season Route und das episode Modell auf die episode Route. Was viele Entwickler verwirrt, ist, dass der Hook der Route model nicht ausgelöst wird, wenn Sie den linkTo Helfer verwenden. Dies ist nicht allzu überraschend, wenn Sie erkennen, dass der Entwickler das Modell für die entsprechende Route bereitstellt (oder bereitstellen kann), indem er ein oder mehrere Modelle (oder null) übergibt.

Weil es nicht viel Dokumentation für tief verschachtelte Ressourcen gibt, war es nicht trivial herauszufinden, wie der linkTo Helfer seine Arbeit unter der Haube erledigt. Das Tauchen in Embers Quelle hilft definitiv, mit dem Framework Schritt zu halten.

+3

http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#toc_supplying-multiple-models Vielleicht war das nicht, dass es durch die Zeit, die Sie diese Frage gestellt ... –

+0

nur einige Tage xp – ahnbizcad

+0

@LucasPottersky Noch ist es jetzt! – StevenNunez

Verwandte Themen