Уже был аналогичный issue.
Предполагая следующие маршруты:
App.Router.map(function (match) {
match('/').to('index');
match('/posts').to('posts', function (match) {
match('/').to('postsIndex');
match('/:post_id').to('post', function (match) {
match('/comments').to('comments', function (match) {
match('/').to('commentsIndex');
match('/:comment_id').to('showComment');
});
});
});
});
Можно ли получить доступ к post_id и comment_id в ShowCommentRoute? В противном случае я должен забыть о составных ключах в моих моделях?
Почему аргумент CommentsRoute#model(params) и CommentsIndexRoute всегда пуст? Как получить комментарии Post, когда?
Мой fiddle.
Запустите этот пример (есть консольный журнал, показывающий проблему.
ОБНОВЛЕНИЕ после некоторого расследования:
Только PostRoute будет иметь params.post_id.
Только ShowCommentRoute будет иметь params.comment_id и не будет params.post_id.
Это неприемлемо для приложений, где модели имеют составные клавиши. В случае, если мы шаг за шагом переходим к showComment, мы можем получить экземпляр Comment:
App.ShowCommentRoute = Ember.Route.extend({
model: function(params) {
var post_id = this.controllerFor('post').get('content.id');
return App.Comment.find(post_id, params.comment_id);
}
});
Но это не сработает, если мы непосредственно посетим /posts/1/comments/1. В этом случае this.controllerFor('post') всегда undefined.
- Если у вас есть вложенные маршруты с динамическими сегментами, вы не можете получить доступ к этим сегментам в
*IndexRoute(PostRouteиPostInderRouteв этом примере) - В ближайшее время невозможно получить родительскую модель маршрута, когда непосредственно посещает вложенный маршрут.