0

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

4

1 に答える 1

0

コードに関する最初の問題は、アプリケーションの外部で ExtJS コードを実行してはならないということです。セッション確認コードをlaunchアプリケーションのメソッドに入れます。これは、ExtJ の新しい MVC パラダイムとより一貫性があります。

sencha cmd について: Sencha cmd バージョン 4 は、アプリが使用するすべての JavaScript ファイルを認識するため、jsb ファイルを維持する必要がなくなりました。こちらの Sencha Cmd の紹介と、完全な Sencha Command 4.0 docsをお読みください。

アプリをコンパイルするjsb3方法は、Sencha Command 3.0 で使用され、下位互換性の理由からバージョン 4.0 でも機能しますが、推奨されません。あなたが言及した参照は、Sencha cmd 4.0 のリリース前に書かれたため、すでに 2 年以上前のものであり、現在は古くなっています。

プロジェクトを新しい考え方の ExtJ に移行する方法を説明することはできません。必要な手順は次のとおりです。

  • 各 JS ファイルにクラス定義が 1 つだけ含まれていること、および含まれているクラス名に対応するパスにあることを確認してください。
  • 推奨事項に従ってフォルダー構造を確認します。

    app/ model/ store/ controller/ view/ Application.js index.html app.js

于 2013-10-31T08:07:45.963 に答える