Ember.js 防止转换出当前路由,但不阻止子路由?

Ember.js 防止转换出当前路由,但不阻止子路由?,ember.js,Ember.js,在某些情况下,我希望防止用户从活动路由转换出去,但同时用户应该能够在当前路由的子路由之间转换。我可以使用willTransition事件来检测转换是否已启动,但如何检测转换是否将退出当前路由或仅在当前路由的子例程之间进行转换 官方的灰烬指南在这种情况下没有帮助。 可能有更好的方法,但您可以通过以下方式检查过渡对象来轻松实现: Em.Route.extend({ actions: { willTransition: function(transition) { var n

在某些情况下,我希望防止用户从活动路由转换出去,但同时用户应该能够在当前路由的子路由之间转换。我可以使用willTransition事件来检测转换是否已启动,但如何检测转换是否将退出当前路由或仅在当前路由的子例程之间进行转换

官方的灰烬指南在这种情况下没有帮助。

可能有更好的方法,但您可以通过以下方式检查过渡对象来轻松实现:

Em.Route.extend({

  actions: {
    willTransition: function(transition) {
      var name = this.routeName;

      var isTransitionOut = transition.state.handlerInfos.every(function(item){
        return name !== item.name;
      });

      if (isTransitionOut) {
        alert('aborting');
        transition.abort();
      }
    }
  }
});

谢谢,我自己也提出了类似的解决方案。我唯一关心的是transition.state.handlerInfos似乎不是公共API,因为它没有文档记录。但希望它不会在没有警告的情况下改变:)