【问题标题】:Ember + Ember Data, Handling Error Substates at the Application Level, Ember 2.8Ember + Ember 数据,在应用程序级别处理错误子状态,Ember 2.8
【发布时间】:2017-03-03 01:38:32
【问题描述】:

我正在尝试做一些听起来很简单的事情。我想将服务器错误呈现到我的 application.hbs 的出口。

阅读此文档https://guides.emberjs.com/v2.6.0/routing/loading-and-error-substates/,我能够检测到我的错误,但我似乎无法按照给定的模式将错误作为模型传递给我的error.hbs。

如果我按照说明在我的应用程序路由上注册错误操作处理程序,我可以呈现我的 error.hbs 模板,但我无法访问我正在处理的错误对象的上下文。此外,我的 URL 路由更新,这是不希望的。

actions: {
    error(err, transition) {
        return this.transitionTo('error');
    }
}

使用这个处理程序,我将 error.hbs 渲染到我的插座,但我没有从我的错误对象中获取任何上下文来渲染到该模板。如果我尝试将错误作为模型传递,则会收到此错误:

More context objects were passed than there are dynamic segments for the route: error

现在,每当加载模型时发生错误,我只会得到一个永远挂起的加载微调器状态。相反,我想显示服务器错误。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    错误作为模型传递给错误子状态。 thrown 或 rejected 的对象将是您的错误子状态的模型,其属性将是属性。

    例如,如果您 throwRSVP.reject { message: 'An Error Occurred' },那么您可以使用 {{model.message}} 在您的 error.hbs 中显示它。我从未见过throw/reject 原语工作。

    Here is a twiddle that demonstrates working error substates(加载 /reject 和 /undefined 路由以查看更多示例)。

    来自旋转的代码

    templates/application-error.hbs(也可以是error.hbs)

    <p>Application-Error Template</p>
    <p>model: {{model}}</p>
    <p>model.message: {{model.message}}</p>
    <p>model.customMessage: {{model.customMessage}}</p>
    

    路由/throw.js

    model(params) {
      throw { customMessage: 'Reject Error Message' };
    },
    

    路由/reject.js

    model(params) {
      return Ember.RSVP.reject({ customMessage: 'Reject Error Message' });
    },
    

    routes/undefined.js

    model(params) {
      use.undefined.value;
    },
    

    【讨论】:

    • 这清楚了很多事情。你有没有找到一种方法可以处理像 throw("foo") 这样的 throw 原语?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多