鉴于以下路由器实施:
Router.map(function() {
this.resource('foo', function() { // URL /foo
this.resource('bars', function() { //URL /foo/bars
this.route('bar', { path: '/:bar_id', }); //URL /foo/bars/123
});
});
this.route('bars'); //URL /bars
...我希望能够通过每行注释中指明的URL访问它们。
出现此问题是因为bars
出现两次;
发生这种情况时,加载URL /foo/bars
时,
/bars
的模板和控制器在/foo
的出口内呈现。
有没有解决方法,允许我按原样维护网址?
(即bars
和/foo/bars
同时存在/bars
更新:
以下是基于@blessenm's suggestion实施的解决方案:
Router.map(function() {
this.resource('foo', function() { // URL /foo
this.resource('foo-bars', { path: 'bars' }, function() { //URL /foo/bars
this.route('bar', { path: '/:bar_id', }); //URL /foo/bars/123
});
});
this.route('bars'); //URL /bars
为此,需要相应地修改保存各种Ember单位的文件路径:
app/{controllers,routes/templates}/foo-bars.{js,hbs}
app/{controllers,routes/templates}/foo-bars/bar.{js,hbs}
答案 0 :(得分:1)
使用this.resource
时,您正在创建新的命名空间。这将干扰指定的最后一条路线。因此,对于最后一个工作路由,您需要更改其名称并指定path
属性以获取所需的URL。更新的代码看起来像
App.Router.map(function() {
this.resource('foo', function() { // URL /foo
this.resource('bars', function() { //URL /foo/bars
this.route('bar', { //URL /foo/bars/123
path: '/:bar_id',
});
});
});
this.route('bars-root', {path: 'bar'});
});
<强> Here is a working bin. 强>