ember.js 中的全局 AJAX 错误处理程序
Global AJAX Error Handler in ember.js
我正在构建一个 Ember 应用程序,它与后端 API 有很多集成,所以我想设置一个全局 AJAX 错误处理程序如果 AJAX 请求失败,则向用户显示。如何在 ember.js 中设置全局 AJAX 错误处理程序?
到目前为止,我有一个错误控制器:
MyApplication.ErrorController = Ember.ObjectController.extend({
errorTitle: '',
errorDescription: '',
actions: {
backToHome: function() {
this.transitionToRoute('home');
}
}
});
我正在尝试使用 jQuery 的 ajaxError
函数来捕获 AJAX 故障:
Ember.$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
var errorController = MyApplication.controllerFor('error');
errorController.set('errorHeading', 'AJAX error');
errorController.set('errorDescription', jqXHR.responseText); //server will return the error description
MyApplication.transitionToRoute('error');
});
但是,controllerFor
不存在于 MyApplication
变量中。我不确定还有什么其他方法可以访问 ErrorController
,因为错误函数完全超出了 Ember 应用程序的范围。
我怀疑这是正确的 Ember 做事方式,但我最终通过使用 MyApplication
:
中的 __container__.lookup
函数解决了这个问题
Ember.$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
var errorController = MyApplication.__container__.lookup('controller:error');
errorController.set('errorHeading', 'AJAX error');
errorController.set('errorDescription', jqXHR.responseText); //server will return the error description
errorController.transitionToRoute('error');
});
我正在构建一个 Ember 应用程序,它与后端 API 有很多集成,所以我想设置一个全局 AJAX 错误处理程序如果 AJAX 请求失败,则向用户显示。如何在 ember.js 中设置全局 AJAX 错误处理程序?
到目前为止,我有一个错误控制器:
MyApplication.ErrorController = Ember.ObjectController.extend({
errorTitle: '',
errorDescription: '',
actions: {
backToHome: function() {
this.transitionToRoute('home');
}
}
});
我正在尝试使用 jQuery 的 ajaxError
函数来捕获 AJAX 故障:
Ember.$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
var errorController = MyApplication.controllerFor('error');
errorController.set('errorHeading', 'AJAX error');
errorController.set('errorDescription', jqXHR.responseText); //server will return the error description
MyApplication.transitionToRoute('error');
});
但是,controllerFor
不存在于 MyApplication
变量中。我不确定还有什么其他方法可以访问 ErrorController
,因为错误函数完全超出了 Ember 应用程序的范围。
我怀疑这是正确的 Ember 做事方式,但我最终通过使用 MyApplication
:
__container__.lookup
函数解决了这个问题
Ember.$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
var errorController = MyApplication.__container__.lookup('controller:error');
errorController.set('errorHeading', 'AJAX error');
errorController.set('errorDescription', jqXHR.responseText); //server will return the error description
errorController.transitionToRoute('error');
});