3

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

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

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

这是我基于github工作的代码。它具有所有功能,只是它呈现到父级出口而不是应用程序出口。

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

4

3 回答 3

2

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

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

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

有关更多详细信息,请参阅路由指南

于 2013-05-21T06:47:55.963 回答
0

一般来说,如果你使用嵌套路由,那么你必须有嵌套的出口。否则,使用浏览器后退按钮转换回父路由将输出一个空模板。希望您对此有所了解。

您可以在以下链接中找到更多详细信息

  1. 在浏览器后退按钮单击时,嵌套路由渲染到相同的模板/插座中断
  2. https://github.com/emberjs/ember.js/issues/1947#issuecomment-12975454
于 2013-05-21T12:53:06.987 回答
0

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

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

这样,URL 仍然是嵌套的,但一切都会正确连接。您还可以更进一步,通过向路由添加后缀来定义不同的模板名称。例如。

this.resource('posts.show', { path: '/posts/:post_id' });
于 2014-06-07T09:16:09.467 回答