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和 noext-all.js或其他app.all.js)。

我进一步假设您可以在控制台上观察到消息,这些消息大致如下:

同步加载“app.controller.Person”。考虑在 Ext.onReady 上方添加 Ext.require()

这意味着您的类依赖项配置不正确。控制器类不会作为依赖项被拾取,因此不会在您的应用程序启动之前预加载。

打包过程(您的第一步)依赖于依赖项来生成jsb3文件。它不会根据需要获取同步加载的依赖项。

解决方案 目标是在您启动应用程序时删除任何同步的按需加载。如果你成功了,打包过程也应该被修复。

作为一种快速解决方法,您可以简单地Ext.require将控制器类放在您的Ext.onReadyorExt.application调用之上。

但是,控制器类应该由框架自动添加为依赖项。如果不是,那么要么你的配置有问题,要么就是 ExtJs 中的一个错误。

于 2012-09-15T04:41:26.387 回答