EmberJs路由器有两个具有相同名称的路段 - 可能吗?

时间:2014-08-04 07:47:18

标签: javascript ember.js url-routing

鉴于以下路由器实施:

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}

1 个答案:

答案 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.