extjs Web アプリをデプロイする準備ができた段階に達し、sencha CMD を使用して jsb ファイルを作成し、それを使用して all-classes.js と all-app.js を作成しました。しかし、展開されたバージョンを実行しようとすると失敗します-理由は理解できますが、修正方法がわかりません。ご覧のとおり、アプリケーションの app.js ファイルは次のようになります。
var SessionData = null;
var Proxy = null;
Ext.Ajax.on('requestexception', function (conn, response) {
if (response.status === 401) {
window.location.href = "../login/index.html";
}
if (response.status === 403) {
var data = Ext.decode(response.responseText);
Ext.MessageBox.alert('Error', data.error);
}
});
....
Ext.Ajax.request({
url :'/LPAA/Servlets/servlet/LPA',
method: 'GET',
params: {
action: App.Actions.UserManagement.VALIDATE,
lpCode: getJsonFromUrl().lpParentCode
},
scope: this,
success: onValidateSession,
failure: function(){
window.location.href = "../login/index.html";
}
});
....
function onValidateSession(response){
SessionData = Ext.decode(response.responseText);
if (SessionData == null || SessionData.userName == null){
window.location.href = "../login/index.html";
return;
}
Proxy = {
type: 'ajax',
url :'/LPAA/Servlets/servlet/LPA',
timeout:120000,
reader: {
root: "array",
type: 'json'
},
writer: {
type: 'json'
}
};
Ext.Loader.setConfig({
enabled: true,
disableCaching: false // this prevents break-points in Chrome's debugger to disappear after reloading the page
});
Ext.application({
requires: [...],
models: [...],
stores: [...],
views: [...],
controllers: [...],
name: 'LPAClient',
launch: function () {
globalApp = this;
Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [
{
xtype: 'entitlement'
}
]
});
try {
Ext.create('LPAClient.GeneralUtils');
} catch (ex){}
}
});
}
ポイントは、最初にセッションがサーバーを介して検証され、有効な場合にのみアプリケーションが構築されることです。アプリを実行すると、ブラウザのコンソールに表示されるエラーは
Uncaught TypeError: Cannot call method 'on' of undefined
Ext.Ajax.on('requestexception'...
コードの先頭にある起源。ネットワークのタブで、app-all.js が Ajax.js ファイルの前に読み込まれていることがわかります。all-app.js ファイルをロードする前に、アプリケーションに Ajax.js ファイルを強制的にロードさせるにはどうすればよいですか? つまり、app.js を使用する前に「Ext.Ajax」を要求するにはどうすればよいですか?
乾杯、eRez