对于高度嵌套的路由,如何在 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
未加载的路线上的问题
我在将 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
未加载的路线上的问题