Javascript 访问Ember ErrorRoute中的错误模型

Javascript 访问Ember ErrorRoute中的错误模型,javascript,ember.js,Javascript,Ember.js,我正在尝试为我的Ember应用程序中的所有失败路由编写一个处理程序 文档似乎建议我可以在我的应用程序对象上创建一个ErrorRoute,当另一个路由失败时,它将自动转换为。如果路由失败的原因是由于身份验证问题(例如令牌超时),我想使用它将用户重定向到登录页面 我的问题是,在ErrorRoute中,我似乎没有任何方法访问失败的路由返回的错误。在将他们重定向到登录屏幕之前,我想确认这是一个身份验证错误,我不知道该如何做 以下是我为测试编写的内容: App.ErrorRoute = Ember.Rou

我正在尝试为我的Ember应用程序中的所有失败路由编写一个处理程序

文档似乎建议我可以在我的应用程序对象上创建一个ErrorRoute,当另一个路由失败时,它将自动转换为。如果路由失败的原因是由于身份验证问题(例如令牌超时),我想使用它将用户重定向到登录页面

我的问题是,在ErrorRoute中,我似乎没有任何方法访问失败的路由返回的错误。在将他们重定向到登录屏幕之前,我想确认这是一个身份验证错误,我不知道该如何做

以下是我为测试编写的内容:

App.ErrorRoute = Ember.Route.extend({
    activate: function() {
        console.log("MODEL A", this.modelFor('error'));

        setInterval(function() {
            console.log("MODEL B", this.modelFor('error'));
        }.bind(this), 1000);
    }
});
当路由被激活时,控制台会记录未定义的
模型
,因为它试图访问由于某种原因尚未设置的App.ErrorController的模型。第二秒钟后,
MODEL B
控制台日志启动,错误模型已建立


如果我无法访问路由的
激活
方法中的错误,那么我在哪里可以访问它?大概我不应该在超时时包装我的逻辑。

您可以在当前活动层次结构的任何路由中管理错误

通常,您在应用程序路由上设置错误处理程序以执行应用程序错误逻辑

App.AccountRoute = Ember.Route.extend({

  afterModel: function() {

    return new Em.RSVP.Promise(function(resolve, reject){

      throw new AuthenticatedError('error message');

    });
  }

});

App.ApplicationRoute = Ember.Route.extend({

  actions: {

    error: function(error) {

      if ( error instanceof AuthenticatedError ) {
        this.transitionTo('login');
      } else {
        // if return true, the event will bubble and transition to error 
        return true;
      }

    }

  }

});

将错误模型传递给错误路由的
renderTemplate(控制器、模型)
方法

如果您不关心在
*.error
路由子状态上着陆,如果您仍要重定向,@ppcano就足够了。但有时您希望将所有错误处理封装在一个专用的错误路由对象中
renderTemplate
然后就是你处理事情的地方


不过我同意,如果它的钩子有正确的(…)模型,那就太好了。

这很有魅力,谢谢ppcano。我想知道为什么官方指南建议使用ErrorRoute重定向到登录屏幕。这对我来说更有意义。