2012-09-14 16 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