2013-06-23 4 views
2

У меня есть 2 вложенных ресурсов, сообщение и комментарий в маршрутизаторе Ember. Я хочу, чтобы это отразить URL:Как отобразить в индекс родительского ресурса {{outlet}}

/posts/1/comments/1

Переход к этой странице следует,

  1. Отрендерьте Сообщение для ид = 1, используя шаблон пост/индекса.
  2. Отрендерьте комментарий на пост с комментариями ID = 1, используя шаблон комментарий/индекс

Вот пример на jsbin.

Мой код маршрутизации,

App.Router.map(function() { 
    this.resource('home', { path: '/' }); 
    this.resource('posts', { path: '/posts' }, function() { 
    this.resource('post', { path: ':post_id' }, function() { 
     this.resource('comments', { path: 'comments' }, function() { 
     this.resource('comment', { path: ':comment_id' }, function() { 
      // need explicit index 
     }); 
     }); 
    }); 
    }); 
}); 

Шаблоны и остальная часть кода Ember довольно много акций. Единственное отличие в том, что я перенаправляю на /posts/1/comments/1 с домашнего маршрута.

Я не могу получить сообщение или комментарий для отображения внутри шаблона/index. И тело сообщения, и тело комментария пустые.

Он работает, если я вставляю содержимое шаблона индекса внутри основных сообщений или шаблона комментариев. Но это не то, что мне нужно, комментарий должен быть вложен в Post.

Любые идеи, как заставить это работать? Благодарю.

PS: Я использую последние данные ember-latest и ember-data.

ответ

3

Обычно такая проблема сводится к соглашениям об именах. Вероятно, ember ищет контроллеры и шаблоны, которых вы не ожидаете. Попробуйте добавить в приложение следующее: затем посмотрите консоль, это поможет вам увидеть, какие маршруты/контроллеры/шаблоны используются.

App = Ember.Application.create({ 
    LOG_ACTIVE_GENERATION: true, 
    LOG_TRANSITIONS: true, 
    LOG_VIEW_LOOKUPS: true 
}); 

Кроме того, эти маршруты, вероятно, сложнее, чем они должны быть. Как правило, для маршрута «post» не имеет смысла встраиваться в ресурс «posts». То же самое касается комментариев/комментариев. Попробуйте это вместо:

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

Спасибо. Сокращение вложенности упрощает вещи. –

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