Пробегая через сайт the starter tutorial на сайте EmberJS, некоторые вещи меня немного смущают.Модели, именования, и это
Одно замечание заключается в том, что я решил использовать ember 1.9.0beta4 с рулями 2.0.0 вместо 1.8.1/1.3.0, включенными в стартовый пакет.
Сначала код, включенный в скринкаст:
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;
}
});
и
index.html
{{#each model}}
<tr><td>
{{#link-to 'post' this}}
{{title}} <small class='muted'>by {{author.name}}</small>
{{/link-to}}
</td></tr>
{{/each}}
Это работает точно так же, как и ожидалось, и запрашиваемый сообщение появляется при нажатии.
Однако, поскольку я использую 1.9.0, предыдущий код выдает устаревшее предупреждение для {{#each}}
, в котором мне следует вместо этого использовать {{#each foo in bar}}
. Я понимаю, почему это появляется и соглашается, что многословие помогает точно показать, какие данные зацикливаются.
Так что я изменить линию {{#each model}}
к {{#each post in model}}
и каждый бит данных исчезает ... тогда я пытаюсь изменить код:
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}}
Отлично! Название и имя автора снова появляются для каждого сообщения. Но нажатие любой из сообщений дает мне неопределенный id
. Я меняю {{#link-to 'post' this}}
на {{#link-to 'post' this.id}}
. Тот же результат. Я меняю его на {{#link-to 'post' post.id}}
. id
теперь включен, но когда я нажимаю на ссылку, я получаю эту ошибку:
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.
Мои вопросы:
Что происходит внутри, что заставляет префикс
post.
если я просто включитьpost in
код? Для меня я должен иметь возможность использовать либоthis
, либо не нуждаться ни в каких префиксах.После добавления
post in
к каждому заявлению, что происходит сthis
? Почему он больше не относится к одному и тому же объекту?Как можно назвать модели, чтобы упростить классификацию?
post in model
действительно должно бытьpost in posts
, но я не нашел способ назвать контейнер данных.Что вызывает ошибку теперь, когда я больше не отношусь к модели как
this
? Как его можно исправить?
Я думаю, что вы вместе с @KalmanHazins прояснили все отлично. Благодаря! –