2012-09-14 68 views
1

我用命令sencha create jsb -a http://myserver/myapp/app.html -p apps.jsb3 -vapps.jsb3不包括控制器定義 - 建設

此創建的文件apps.jsb3,當我打開這個文件,它包含了對模型和存儲所有的定義時(但,沒有控制器)。

然後我跟着命令;

sencha build -p apps.jsb3 -v -d .這創建了2個文件。 app.all.js,它是模型,商店和app.js的壓縮形式(並且它還包括在app.js中找到的應用程序的控制器的定義)

ex:....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-所有。 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"

這是爲什麼,我該如何解決這個問題?

UPDATE 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); 
    } 

}); 
+0

請使用您的** app.js **代碼更新您的文章。 – Natasha

+0

我已將我的'app.js'添加到我的帖子中。請看一看。 – Illep

+0

你得到一個與**「controller/Person.js」**有關的錯誤,但** app.js **的**控制器**中沒有這樣的文件。我錯了嗎? – Natasha

回答

1

您所描述的過程對我來說很好。

你應該關注的問題是爲什麼生成的jsb3文件不包含控制器類。以下所有步驟似乎都能正常工作,但應用程序最終不會啓動,因爲打包過程不包含控制器類文件。在

Ext.Loader踢和嘗試動態(「按需」)加載控制器類文件 - 這裏的目標是修復路徑配置Ext.Loader找到控制器類,而是確保控制器類首先包含在步驟1的jsb3文件中。

我假設你的應用程序在非包裝狀態(只有ext-dev.js,沒有ext-all.jsapp.all.js或任何)通過http://myserver/myapp/app.html啓動時,它啓動了罰款。

我還以爲你可以觀察到,說沿着線的東西在控制檯上的消息:

同步加載「app.controller.Person」。考慮在Ext.onReady之上添加Ext.require()

這意味着您的類依賴關係配置不正確。控制器類爲而不是,因此在您的應用程序啓動之前預先加載爲依賴項,因此不是

包裝過程(您的第一步驟)依賴於依賴關係來生成jsb3文件。它會而不是拿起需求同步加載的依賴項。

解決方案 的目標是消除任何同步按需加載,當你啓動應用程序。如果你成功了,包裝過程也應該被修復。

作爲一種快速解決方法,您可以簡單地將Ext.require您的控制器級別撥打Ext.onReadyExt.application以上的電話。

然而,控制器類被自動添加作爲由框架依賴性。如果他們不是,那麼你的配置是錯誤的或者它存在ExtJs中的錯誤。

+0

我沒有看到'Synchronically loading ...'錯誤信息。無論如何,我應該包括控制器爲'Ext.require('MyApplication.controller.PersonController'); '?與文件「MyApplication.controller.PersonController」的完整路徑? – Illep

+0

將所有控制器添加爲'Ext.require('MyApplication.controller.PersonController');'我仍然得到相同的輸出。 – Illep

+0

這很奇怪。 您沒有回答我的問題,您是否可以在瀏覽器中使用'http:// server/proj/app.html'成功啓動您的應用程序?忘記包裝。正如我所說:如果您的應用程序無法正確啓動,包裝也會失敗。 – mistaecko