Новый маршрутизатор Ember.js: доступ к сериализованным объектам из сегментов родительского динамического маршрута
Уже был аналогичный 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
в этом примере)
- В ближайшее время невозможно получить родительскую модель маршрута, когда непосредственно посещает вложенный маршрут.
Ответы
Ответ 1
Используя ember-1.0.0-rc.1, теперь можно получить доступ к родительской модели маршрута при прямом посещении URL-адреса.
App.ShowCommentRoute = Ember.Route.extend({
model: function(params) {
var post = this.modelFor('post');
return App.Comment.find(post.get('id'), params.comment_id);
}
});