Mentre si scorre attraverso the starter tutorial sul sito di EmberJS, alcune cose mi hanno un po 'confuso ora.Modelli, nomi e questo
Una cosa da notare immediatamente è che ho deciso di utilizzare l'ember 1.9.0beta4 con manubri 2.0.0 anziché 1.8.1/1.3.0 incluso nel pacchetto iniziale.
Prima il codice incluso nel screencast:
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;
}
});
e
index.html
{{#each model}}
<tr><td>
{{#link-to 'post' this}}
{{title}} <small class='muted'>by {{author.name}}</small>
{{/link-to}}
</td></tr>
{{/each}}
Questo funziona esattamente come previsto e il post richiesto appare quando si fa clic.
Tuttavia, poiché sto usando 1.9.0, il codice precedente produce un avviso obsoleto per {{#each}}
, che mi dice di usare {{#each foo in bar}}
invece. Capisco perché questo appare e concordare che la verbosità aiuta a mostrare esattamente quali dati vengono trasmessi.
Così ho cambiare la linea {{#each model}}
-{{#each post in model}}
e ogni bit di dati scompare ... Allora provo a cambiare il codice per:
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}}
Grande! Il titolo e il nome dell'autore appaiono ancora una volta per ogni post. Ma fare clic su entrambi i post mi dà un indefinito id
. Cambio {{#link-to 'post' this}}
in {{#link-to 'post' this.id}}
. Stesso risultato Lo cambio in {{#link-to 'post' post.id}}
. Il id
è ora incluso ma quando clicco il link ottengo questo errore:
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.
Le mie domande sono:
Cosa accade internamente che costringe il prefisso
post.
se ho semplicemente includere il codicepost in
? Per me dovrei essere in grado di usarethis
o continuare a non aver bisogno di alcun prefisso.Dopo aver aggiunto
post in
a ciascuna istruzione, cosa succede athis
? Perché non si riferisce più allo stesso oggetto?Come si possono denominare i modelli per semplificare la classificazione?
post in model
dovrebbe essere in realtàpost in posts
ma non ho trovato un modo per assegnare un nome al contenitore dei dati.Che cosa sta causando l'errore ora che non mi riferisco più al modello come
this
? Come si può rimediare?
Penso che tu, insieme a @KalmanHazins, hai chiarito tutto alla perfezione. Grazie! –