我正在使用 Ext JS 4.1 创建一个 CRM 类型的应用程序。为了连接到服务器端,我通过RemotingProvider
.
在应用程序启动和渲染之前,我想通过 Ext Direct 从服务器检索一些全局变量,主要是当前登录用户的配置语言及其配置的权限。然后,根据用户的语言(根据该结果),我需要加载 Ext JS 语言环境文件和我自己的自定义语言环境文件。(请注意,必须在创建任何组件之前加载它们,因为之后不会应用它们。)
所以,程序是:
- 通过获取 Globals
Ext.php.Globals.getGlobals
- 通过获取 Ext 语言环境
Ext.loader.loadScript
, - 通过获取应用程序语言环境
Ext.loader.loadScript
- 设置视口
从 1.-3 开始。是异步的,除了嵌套回调我没有其他方法:
Ext.application({
name: 'MyApp',
launch: function() {
var app = this;
// Welcome to callback hell...
Ext.php.Globals.getGlobals(function(data) {
// insert globals into app namespace
Ext.apply(MyApp, data);
// load ext locale
Ext.Loader.loadScript({
url: 'ext/locale/ext-lang-'+MyApp.currentUser.culture.toLowerCase()+'.js',
onLoad: function() {
// load app locale
Ext.namespace('MyApp.locale');
Ext.Loader.loadScript({
url: 'app/locale/'+MyApp.currentUser.culture.toUpperCase()+'.js',
onLoad: function() {
// FINALLY, set up viewport
var viewport = Ext.create('MyApp.view.Viewport', {
controller: app
});
if (MyApp.util.hasPermission('usermgmt'))
app.getController('Locations');
// and so on ...
}
});
}
});
});
}
}); // end application
有没有其他更优雅的方式来编写这段代码?我知道有用于异步流的库,但是这些库中的任何一个都可以在这里与 Ext JS API 一起使用吗?或者我可以以某种方式强制Ext.syncRequire
为我加载语言环境(所以我只有一层嵌套用于getGlobals
调用)?我自己的语言环境定义了一个类,但 Ext 语言环境没有。另外,这会以某种方式弄乱使用Sencha Cmd编译源文件吗?