我的Ember路由器看起来与下面类似。
App.Router.map(function() {
this.resource('projects', function () {
this.resource('listings', { path: '/:project_id/listings' }, function() {
this.route('listing', { path: '/:listing_id' });
});
});
});
我有2个模板(项目,列表)。项目模板有一个{{#link-to}}
助手,可以为列表资源添加一个锚点。项目模板工作正常。 {{#link-to}}
帮助器似乎也正确生成url
(〜/ projects / 2 / listing)。
现在列表正确呈现,但它们在项目模板中呈现。我假设这是因为资源是嵌套的。所以我删除了嵌套,并将项目和列表作为自己的资源。
App.Router.map(function() {
this.resource('projects');
this.resource('listings', { path: 'projects/:project_id/listings' }, function() {
this.route('listing', { path: '/:listing_id' });
});
});
问题是当路线转换到列表时,不会呈现列表模板。它只是空白。下面的小提琴演示了这个问题。
答案 0 :(得分:5)
要做你想做的事,请按照与
相同的方式构建路线App.Router.map(function() {
this.resource('projects', function () {
this.resource('listings', { path: '/:project_id/listings' }, function() {
this.route('listing', { path: '/:listing_id' });
});
});
});
然后,projects
模板应该只是{{outlet}}
。如果有内容仅在导航到/ projects时要呈现,而不是在深入导航时,请将该内容放在projects/index
模板中(或根据您的命名约定调用该模板)和设置ProjectsIndexRoute
和ProjectsIndexController
上任何必要的路由器和控制器内容。现在,您的listings
模板只会嵌套在projects
内,这只是一个插座,在查看商家信息时,您将看不到任何projects/index
内容。
http://emberjs.com/guides/routing/defining-your-routes/#toc_resources