使用嵌套路由时可以使用应用程序插座吗?

时间:2013-05-21 04:46:43

标签: ember.js ember-rails

我有一个基于帖子的应用程序。当我像这样嵌套路线时:

this.resource('posts', function() {
  this.route('post', {path: ':post_id'});  
});

并尝试访问/ posts / id链接,如果我将{{outlet}}放入帖子模板,它只会呈现模板。

以下是我根据github工作的代码。它具有所有功能,除了它呈现到父插座而不是应用程序插座。

是否可以让show,new或edit模板在应用程序{{outlet}}中呈现其模板?

3 个答案:

答案 0 :(得分:2)

您可以覆盖路线的renderTemplate(controller, model)挂钩并致电this.render

renderTemplate: function(controller, model) {
  this.render('post',    
  {
    into: 'appplication',                // the template to render into
  });
}

您可以传递的其他选项包括outlet(选择指定的插座)和controller(使用您选择的控制器)。

有关详细信息,请参阅routing guide

答案 1 :(得分:0)

通常,如果您使用嵌套路线,则必须具有嵌套路径。否则,使用浏览器后退按钮转换回父路径将输出一个空模板。希望你知道它。

您可以在以下链接中找到更多详情

  1. Nested routes rendering into same template/outlet breaks on browser back button click
  2. https://github.com/emberjs/ember.js/issues/1947#issuecomment-12975454

答案 2 :(得分:0)

我知道这个答案有点晚,但我遇到了同样的问题。问题是嵌套路由依赖于嵌套出口。如果您希望将路线渲染到应用程序插座中,您可以执行以下操作:

this.resource('posts');
this.route('post', { path: '/posts/:post_id' });

这样,URL仍然是嵌套的,但所有内容都可以正确连接。 您还可以更进一步,通过在路径中添加后缀来定义不同的模板名称。例如

this.resource('posts.show', { path: '/posts/:post_id' });