Während ich durch the starter tutorial auf EmberJS Website läuft, ein paar Dinge haben mich jetzt ein wenig verwirrt.Models, Naming, und dies
Eine Sache, sofort zu beachten ist, dass ich mich entschieden habe, das ember 1.9.0beta4 mit Lenker 2.0.0 anstelle von 1.8.1/1.3.0 zu verwenden, die im Starterpaket enthalten sind.
Zuerst wird der Code in den Screencasts enthalten:
app.js
App.Router.map(function() {
this.resource('about');
this.resource('posts');
this.resource('post', {path: ':post_id'})
});
App.PostsRoute = Ember.Route.extend({
model: function() {
return posts;
}
});
und
index.html
{{#each model}}
<tr><td>
{{#link-to 'post' this}}
{{title}} <small class='muted'>by {{author.name}}</small>
{{/link-to}}
</td></tr>
{{/each}}
Dies funktioniert genau wie erwartet und die angeforderte Post erscheint, wenn darauf geklickt.
Da ich jedoch 1.9.0 verwende, erzeugt der vorhergehende Code eine veraltete Warnung für {{#each}}
, die stattdessen {{#each foo in bar}}
verwenden soll. Ich verstehe, warum dies angezeigt wird und stimme zu, dass die Ausführlichkeit genau zeigt, welche Daten durchgeschleift werden.
So ändern Sie die Zeile {{#each model}}
-{{#each post in model}}
und jedes Bit der Daten verschwindet ... Ich versuche dann, um den Code zu ändern:
updated index.html
{{#each post in model}}
<tr><td>
{{#link-to 'post' this}}
{{post.title}} <small class='muted'>by {{post.author.name}}</small>
{{/link-to}}
</td></tr>
{{/each}}
Great! Der Titel und der Name des Autors erscheinen erneut für jeden Beitrag. Aber das Klicken auf einen der beiden Posts gibt mir einen undefinierten id
. Ich ändere {{#link-to 'post' this}}
zu {{#link-to 'post' this.id}}
. Gleiches Ergebnis. Ich ändere es zu {{#link-to 'post' post.id}}
. Die id
ist nun enthalten, aber wenn ich auf den Link klicken ich diesen Fehler:
Error while processing route: post Assertion Failed: You used the dynamic segment
post_id in your route post, but App.Post did not exist and you did not override
your route's `model` hook.
Meine Fragen sind:
Was intern passiert, dass das
post.
Präfix zwingt, wenn ich denpost in
Code einfach ein? Ich sollte in der Lage sein, entwederthis
zu verwenden oder weiterhin kein Präfix zu benötigen.Nach dem Hinzufügen von
post in
zu jeder Anweisung, was passiert mitthis
? Warum bezieht es sich nicht mehr auf das gleiche Objekt?Wie können Modelle benannt werden, um die Kategorisierung zu vereinfachen?
post in model
sollte wirklichpost in posts
sein, aber ich habe keine Möglichkeit gefunden, den Datencontainer zu benennen.Was verursacht jetzt den Fehler, dass ich nicht mehr auf das Modell als
this
Verweise? Wie kann es behoben werden?
Ich denke du hast zusammen mit @KalmanHazins alles perfekt geklärt. Vielen Dank! –