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

时间:2014-04-28 11:33:13

标签: javascript ember.js

我不确定我是否做错了什么,但在我的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模板,我希望这个模板可能被错误的网关'错误,但模板没有加载,有什么特定的方法可以加载默认的错误模板吗?

感谢。

3 个答案:

答案 0 :(得分:2)

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

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    error: function() {

      this.render('error', {
        into: 'application'
      });
    }
  }

});

有一个例子here

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

答案 1 :(得分:2)

只是return true所以错误不断冒出来:

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

How to both have an action error and render template in EmberJS

答案 2 :(得分:1)

添加@ ppcano的答案:

如果您需要在错误模板上显示错误消息,请将错误对象传入错误操作,如here所示。

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'
    });
  }
}