1

コマンドを使用しましたsencha create jsb -a http://myserver/myapp/app.html -p apps.jsb3 -v

これにより、apps.jsb3ファイルが作成されました。このファイルを開くと、モデルとストアのすべての定義が含まれていました(ただし、コントローラーは含まれていません)。

それから私はコマンドを続けました;

sencha build -p apps.jsb3 -v -d .これにより、2つのファイルが作成されました。app.all.jsは、モデル、ストア、およびapp.jsの圧縮形式です(app.jsにあるアプリケーションのコントローラーの定義も含まれています)

例:....controllers:["Person","Pers...同様に

次に、all-classes.jsすべてのモデルがあり、格納されます(コントローラーはありません)

次に、app.htmlファイルに以下を含めました

<script type="text/javascript" src="extjs/ext.js"></script>
<script type="text/javascript" src="app-all.js"></script>

最後に、app-all.js、all-classes.js、app.htmlをサーバー内の別のフォルダーにコピーしました。このフォルダはと呼ばれSERVERFOLDER2ます。

今、私がタイプhttp://myserver/SERVERFOLDER2/app.htmlすると、それはそれを言い"NetworkError: 404 Not Found - http://myserver/SERVERFOLDER2/app/controller/Person.js?_dc=1347636548640"ます。

これはなぜですか、どうすればこれを解決できますか?

APP.JSを更新

Ext.Loader.setConfig({
    enabled: true     
});
Ext.require('Ext.container.Viewport' );  
Ext.application({        
    requires: [                     
        'MyApp.Names',          
        'Ext.window.MessageBox'   
    ],                         
       models: [      
        'PersonModel',      
        'SchoolModel'                 
    ],     
    stores: [ 
        'PersonStore',
        'SchoolStore'  ,
        'GenderStore
    ],     
    views: [            
        'UserPanel',      
        'SchoolViewPanel',               
        'UpdateSchoolWindow' 
    ],            
    controllers: [        
        'SchoolController',    
        'PersonController',      
        'UserActionController',
    ],     
     name: 'MyApp', 
    refs: 
        [{         
            ref: 'viewport',   
            selector: 'viewport'
        }],     
    launch: function() {
        Ext.create('Ext.container.Viewport', {  
        layout: 'card',  
            items: [  
            { 
                xtype: 'panel',        
                items: {
                xtype: 'UserPanel' 
                }
            }
            ]
        });  

    },

    userSuccess: function() {  
        var st = Ext.getStore('PersonStore');         
        st.on('load', this.onSuccess, this, {    
            single: true,  
            delay: 100            
        }); 
        st.load();      
    },            

    onSuccess: function() {      
        this.getViewport().getLayout().setActiveItem(1); 
    }

});
4

1 に答える 1

1

あなたが説明するプロセスは私には良さそうです。

注目すべき問題は、生成されたjsb3ファイルにコントローラークラスが含まれていない理由です。以下のすべての手順は正しく機能しているように見えますが、パッケージ化プロセスにコントローラークラスファイルが含まれていないため、アプリケーションは最終的に起動しません。

Ext.Loaderが起動し、コントローラークラスファイルを動的に(「オンデマンド」で)ロードしようとします-ここでの目標は、Ext.Loaderがコントローラークラスを見つけるためのパス構成を修正することではなく、コントローラークラスがjsb3そもそもステップ1のファイルに含まれています。

http://myserver/myapp/app.htmlパッケージ化されていない状態(のみext-dev.js、なしext-all.jsapp.all.jsまたはその他)でアプリケーションを起動すると、アプリケーションは正常に起動すると思います。

さらに、コンソールで次のようなメッセージを確認できると思います。

'app.controller.Person'を同期的にロードします。Ext.onReadyの上にExt.require()を追加することを検討してください

これは、クラスの依存関係が正しく構成されていないことを意味します。コントローラクラスは依存関係として取得されないため、アプリケーションの起動前にプリロードされません。

パッケージ化プロセス(最初のステップ)は、依存関係に依存してjsb3ファイルを生成します。オンデマンドで同期的にロードされた依存関係を取得しません。

解決策 目標は、アプリケーションの起動時に同期オンデマンドロードを削除することです。成功した場合は、パッケージングプロセスも修正する必要があります。

簡単な回避策として、または呼び出しExt.requireの上にあるコントローラークラスを使用することができます。Ext.onReadyExt.application

ただし、コントローラークラスは、フレームワークによって依存関係として自動的に追加される必要があります。そうでない場合は、構成に問題があるか、ExtJにバグがあります。

于 2012-09-15T04:41:26.387 に答える