Ember上的默认错误模板未加载

default error template on Ember not loading

本文关键字:加载 错误 默认 Ember      更新时间:2023-09-26

我不确定我是否做错了什么,但在我的ApplicationRoute上,我有这样的东西:

actions: {
    error: function(error, transition) {
        var self = this;
        metadata = {
            'timeout': {
                action: function(error, transition) {
                   BootstrapDialog.alert({message: 'Request Timeout!'});
                }
            },
            'forbidden': {
                action: function(error, transition) {
                    self.transitionTo('companies');
                }
            },
            'unauthorized': {
                action: function(error, transition) {
                    window.location.replace(error.responseJSON.redirect_url);
                }
            },
            'bad gateway': {
                action: function(error, transition) {
                    throw new Error("Error");
                }
            }
        };
        if(error.statusText.toLowerCase() in metadata) {
            metadata[error.statusText.toLowerCase()].action(error, transition);
        }
    }
}

我有一个error.hbs templete,我希望在"坏网关"错误时触发它,但模板没有加载,有什么具体的方法可以加载默认的错误模板吗?

谢谢。

如果定义应用程序错误处理程序,则必须呈现错误模板。

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    error: function() {
      this.render('error', {
        into: 'application'
      });
    }
  }
});

此处提供了一个示例。

您可以删除错误处理程序,并检查ember如何呈现错误模板。

只有return true,因此错误不断出现:

actions: {
  error(transition, originRoute) {
    return true;
  }
}

如何在EmberJS 中同时出现操作错误和渲染模板

添加到@ppcano的答案:

如果需要在错误模板上显示错误消息,请将错误对象传递到错误操作中,如下所示。

actions: {
  error: function(error) {
    // e.g. you can have a controller for the error route and set error.message and error.status here
    this.render('error', {
      into: 'application'
    });
  }
}