У меня есть приложение Ember.js 3.8, в котором мне нужна обработка ошибок на уровне приложения. Я прочитал, как представляется, соответствующую часть документации , но она не работает так, как я ожидал.
У меня есть компонент для проверки:
исключение-создатель.hbs
<div class="panel panel-info">
<div class="panel-heading">Development Only - Exception Creator</div>
<div class="panel-body">
<p>Press the button below to create an exception</p>
<button {{action 'throw' }}>Throw an Exception</button>
</div>
</div>
{{yield}}
исключение-создатель.js
import Component from '@ember/component';
export default Component.extend({
actions: {
throw(){
alert("About to throw an exception");
throw new Error('Whoops!');
}
}
});
И (согласно моему чтению документа) Я создал маршрут application-error
application-error.hbs
<h1>Error Handler</h1>
<p>This is the error handler</p>
{{outlet}}
application-error.js
import Route from '@ember/routing/route';
export default Route.extend({
});
Когда я нажал кнопку, я ожидал (после предупреждения) перенаправить его на шаблон application-error
... но это не так. Что происходит, так это то, что консоль отладки показывает «Uncaught Error: Whoops!».
Может кто-нибудь сказать мне, где я иду не так, пожалуйста?
EDIT
После того, как @stevenelberger указал верный путь, у меня теперь есть рабочая версия, которую я собираюсь выложить здесь, чтобы другие могли извлечь из нее пользу в будущем (не то, чтобы в этом было что-то большое, ноэто может кому-то помочь).
Я создал новый маршрут exception-testing-route
exception-testing-route.js
import Route from '@ember/routing/route';
export default Route.extend({
model() {
throw new Error('Whoops - something bad happened at exception-testing-route');
},
actions: {
error(error, transition) {
console.log("The action 'error' is firing in the route exception-testing-route.");
console.log("About to return true to bubble the error.");
return true;
}
},
});
exception-testing-route.hbs
{{outlet}}
Если действие error
вернет true, это приведет к возникновению ошибки, в данном случае к маршруту application-error
следующим образом
application-error.js
import Route from '@ember/routing/route';
export default Route.extend({
setupController(controller, error) {
console.log("application-error setupController firing");
console.log(error.message);
this._super(...arguments);
}
});
application-error.hbs
<h1>Error Handler</h1>
<p>This is the error handler</p>
{{outlet}}
Вызов результатов маршрута тестирования исключенийв следующей последовательности обработки.