我的场所资源有两条路线:一个概述' / places'和一个详细视图' / places /:id。
this.resource('places', function () {
this.resource('place', { path: '/:place_id' }, function () {
});
});
在我的应用程序控制器中,即在应用程序启动时,如果满足某些条件,我想执行重定向。我通过
进行转换if (condition) {
this.store.find('place', 0).then(
function (place) {
self.transitionTo('place.index', place);
}
);
}
当我通过LOG_TRANSITIONS: true
记录过渡时,会输出Transitioned into 'places.place.index'
- 看起来不错。
但是,它会触发两个渲染模板的路径:PlacesRoute和PlaceRoute。由于两者都使用不同的插座来渲染模板,因此我看到了两者的内容。
如何防止此行为?当我稍后执行到另一个地方的过渡时,一切都按照我的预期进行,即它只触发PlacesRoute(而不是PlaceRoute)。
答案 0 :(得分:1)
首先,我建议重新命名' place'资源到' places.place' (this.resource('places.place', ...)
或this.route('place', ...)
获取Ember的最新版本。
中学,你想做什么?当Ember处理转换到子路由时,它应该在层次结构中加载和呈现路由(应用路由 - >放置路由 - >放置路由以防转换到places.place
路由)。如果路线已经呈现(呈现),则不会发生任何事情(例如:从地点ID为1的places.place
过渡到地点ID为2的places.place
将不会触发重新申请并放置路线)。
将子路线视为显示信息的渐进式规范:在places
路线中,用户可以看到地点列表,在places.place
路线中,他可以看到地点列表和有关某个特定地点的信息。