TransitionTo触发两条路线

时间:2014-09-17 08:36:35

标签: ember.js ember-router

我的场所资源有两条路线:一个概述' / 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)。

1 个答案:

答案 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路线中,他可以看到地点列表和有关某个特定地点的信息。