对于高度嵌套的路由,如何在 ember 中使用新的 this.route() 实现 this.resource() ?

how to achieve this.resource() with new this.route() in ember for highly nested routes ?

我在将 ember1.x 升级到 3.x 的过程中,我在使用 this.resource 用于嵌套路由时遇到路由器问题,现在它已被折旧并更改为 this.route

但是当涉及到嵌套路由时,它不再起作用了 如果我进一步解释,假设

this.resource( 'parent1', { path: '/' }, function() {

    this.route( 'someroute1', { path: '/' } );
    this.route( 'someroute2', { path: '/someroute2' } );


    this.resource( 'parent11', { path: '/app' }, function() {

      this.route( 'someroute11', { path: '/' } );
      this.route( 'someroute12', { path: '/someroute12' } );

      this.resource( 'parent111', { path: '/:paramid' }, function() {
      this.route( 'index', { path: '/' } );
      this.route( 'someroutewanttogo', { path: '/pathrouteiwanttogo' } 
  );
});

这是之前的事,我路由到最后一条路线

this.transitionTo('parent111', id)

这非常有效。

然后我将资源更改为如下路由

this.route( 'parent1', { path: '/' }, function() {

    this.route( 'someroute1', { path: '/' } );
    this.route( 'someroute2', { path: '/someroute2' } );


    this.route( 'parent11', { path: '/app' }, function() {

      this.route( 'someroute11', { path: '/' } );
      this.route( 'someroute12', { path: '/someroute12' } );

      this.route( 'parent111', { path: '/:paramid' }, function() {
      this.route( 'index', { path: '/' } );
      this.route( 'someroutewanttogo', { path: '/pathrouteiwanttogo' } 
  );
});

然后在路由 transitionTo() 中找不到路由,所以我尝试调用

this.transitionTo('parent1.parent11.parent111', 编号);

但这丢失了,因为它没有触发 parent111 或 children 的控制器。

我在这里做错了什么?

您可以使用 {resetNamespace: true} 参数调用 route 而不是使用 here.

中描述的 resource

所以你的 router 会像:

this.route( 'parent1', {resetNamespace: true}, function() {

    this.route( 'someroute1', { path: '/' } );
    this.route( 'someroute2', { path: '/someroute2' } );

    this.route( 'parent11', {resetNamespace: true}, function() {

        this.route( 'someroute11', { path: '/' } );
        this.route( 'someroute12', { path: '/someroute12' } );

        this.route( 'parent111', {resetNamespace: true}, function() {
              this.route( 'index', { path: '/' } );
              this.route( 'someroutewanttogo', { path: '/pathrouteiwanttogo' });
        });
    });
});

问题是即使我将资源更改为路由,我也没有根据定义的路由更改文件系统和文件。因此我必须根据定义的路由结构更改所有文件。这解决了我在 ember 3.5

未加载的路线上的问题