2013-08-07 4 views
2

У меня есть вложенные ресурсы на моих маршрутах. Давайте предположим, по this example, что мой router.js выглядит как:Как определить имя маршрута для вложенного ресурса в Ember.js?

App.Router.map(function() { 
    this.resource('post', { path: '/post/:post_id' }, function() { 
    this.resource('comment', { path ':comment_id' }); 
    }); 
}); 

В документации сказано, это должно прокладывать маршруты, как:

/post/:post_id    post.index 
/post/:post_id/:comment_id comment.index 

Однако я хотел бы, чтобы они были post.show и comment.show, как переименовать эти маршруты?

+0

Я ответил на ваш вопрос. Мой пример работает для вас? –

+0

@ MárcioRodriguesCorreaJúnior Это скорее обходной путь для меня, чем решение. Однако в вашем примере JSbin комментарии не указаны, и я не могу подтвердить его работу. – p1100i

+0

Да, это похоже на обходной путь, но я не нашел другого пути. И вы можете получить доступ к комментариям по адресу http://jsbin.com/ucanam/647#/post/1/1. Или нажмите ссылку Marcio здесь http://jsbin.com/ucanam/647#/post/1 –

ответ

1

У меня есть эта работа со следующей настройкой.

Маршрутизаторы с динамическим сегмента:

App.Router.map(function() { 
    this.resource('post.show', { path: '/post/:post_id' }); 
    this.resource('comment.show', { path: '/post/:post_id/:comment_id' }); 
}); 

Переопределение serialize крючок App.CommentShowRoute для отражения URL ожидается:

App.CommentShowRoute = Ember.Route.extend({ 
    serialize: function(model) {  
     return {   
      post_id : model.get("post_id"), 
      comment_id : model.get("id") 
     }; 
    } 
}); 

Основная проблема деле внедрения этого является URL генерируется, так как модель в serialize hook, не загружен, post_id собственности нет, и после того, как модель загружена, это не будет автоматически обновляться. Так что linkTo, ориентированный на комментарий, будет иметь URL-адрес post/undefined/1, а не post/1/1. Щелчок по ссылке работает, потому что через некоторое время модель загрузится, но если пользователь обновит страницу, она не будет работать из-за неправильного URL-адреса.

Чтобы исправить это, я использовал подход 3 из this обсуждения на форуме, где мы используем вспомогательный помощник action вместо linkTo. Единственное отличие заключается в том, что ссылка не будет иметь свойство href` с URL-адресом, но при нажатии на все работает.

В результате:

App.PostShowRoute = Ember.Route.extend({ 
    events : { 
     goToComment: function(context){ 
      this.transitionTo('comment.show', context); 
     } 
    } 
}); 

Вот demo с полной реализации.

Смежные вопросы