Уже был аналогичный 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
в этом примере) - В ближайшее время невозможно получить родительскую модель маршрута, когда непосредственно посещает вложенный маршрут.