Extjs 对动态加载的控制器使用Sencha Cmd

Extjs 对动态加载的控制器使用Sencha Cmd,extjs,build,extjs4,sencha-cmd,Extjs,Build,Extjs4,Sencha Cmd,我已经使用ExtJS4创建了一个应用程序controllers属性仅包含主控制器: Ext.application({ 名称:“MyApp”, appFolder:'应用', 控制器:[ “main.App” ], loadController:函数(控制器){ var oController=this.getController(controller); oController.init(this); oController.onLaunch(这个); } }); MyApp.main.Ap

我已经使用ExtJS4创建了一个应用程序app.js中的code>controllers属性仅包含主控制器:

Ext.application({
名称:“MyApp”,
appFolder:'应用',
控制器:[
“main.App”
],
loadController:函数(控制器){
var oController=this.getController(controller);
oController.init(this);
oController.onLaunch(这个);
}
});
MyApp.main.App
controller使用方法按名称加载其他控制器(请参见loadController()方法)。这些控制器是动态加载的,不在我的
index.html
文件中列出

为了生成部署到服务器的生产版本,我正在使用Sencha Cmd,方法是在我的应用程序文件夹中发出以下命令:

sencha app build
该工具正常完成并将所有文件压缩为一个大的all-classes.js。问题是动态加载的控制器不包括在该文件中

使动态加载的控制器(总共超过100个)由Sencha Cmd缩小和处理的正确方法是什么


我知道,我可以在我的
app.js
中列出它们,或者使用
Ext.require
将它们包含在一些文件中,但我正在寻找正确的方法,以便在我的构建中自动包含100多个不同的控制器、视图、模型和存储。我相信还有其他的Ext JS用户,他们正在创建大规模的应用程序,并且正在以某种方式进行构建。如果有任何建议或成功案例,我将不胜感激,这将帮助我找到正确的构建方法。

我会将所有控制器放入阵列中。这些应该迫使工具跟踪它们,并将它们包含到构建中。另一方面,uses并不要求类在定义时可用,而是保证它们在调用onReady(一个在应用程序中)块时可用

请注意,您将需要在 使用数组

我不使用构建工具,因此我无法测试它,但它应该可以工作


根据评论更新由提供的示例


bhovhannes:我在build.xml中添加了一段代码,它收集 当我构建sencha应用程序时,我的控制器使用数组。这样我 在开发过程中使用数组时不填充任何内容,只需添加控制器即可 进入控制器文件夹,因为它们都是从中动态加载的 我的应用程序

app.js

Ext.application({
    name: 'MyApp',
    appFolder: 'app',

    controllers: [
        "main.App"
    ],

    uses: [
        /*ant-generated-content-start*/ /*ant-generated-content-end*/
    ],

    autoCreateViewport: true,
});
build.xml

<?xml version="1.0" encoding="utf-8"?>
<project name="MyApp" default=".help">
    <import file="${basedir}/.sencha/app/build-impl.xml"/>

    <target name="-before-build">

        <echo message="Collecting all controllers in application class property ... "/>
        <fileset id="app_controllers" dir="${app.dir}/app/controller" casesensitive="yes">
            <include name="**/*.js"/>
        </fileset>
        <pathconvert pathsep="," property="app_controller_names" refid="app_controllers" targetos="unix">
            <chainedmapper>
                <globmapper from="${app.dir}/app/*" to="${ant.project.name}/*" casesensitive="no" handledirsep="yes"/>
                <chainedmapper>
                    <regexpmapper from="^(.*)\.js$$" to='"\1"'/>
                    <filtermapper>
                        <replacestring from="/" to="."/>
                        <replacestring from="\" to="."/>
                    </filtermapper>
                </chainedmapper>
            </chainedmapper>
        </pathconvert>
        <echo message="Collected controllers: ${app_controller_names}"/>

        <echo message="Injecting into app.js ..."/>
        <replaceregexp file="${app.dir}/app/app.js"
                       match="/\*ant-generated-content-start\*/(.*)/\*ant-generated-content-end\*/"
                       replace="/*ant-generated-content-start*/ ${app_controller_names} /*ant-generated-content-end*/"
                       byline="true"
                />
    </target>

    <target name="-after-build">
        <echo message="Reverting to original app.js ..."/>
        <replaceregexp file="${app.dir}/app/app.js"
                       match="/\*ant-generated-content-start\*/(.*)/\*ant-generated-content-end\*/"
                       replace="/*ant-generated-content-start*/ /*ant-generated-content-end*/"
                       byline="true"
                />
    </target>

</project>


感谢链接到
使用
。它可能是有用的。但这样一来,我所有的控制器都将通过一个巨大的
uses
阵列包含进来。这不仅使开发更加复杂(每次添加新控制器时,还应将其添加到
uses
部分),而且还将所有控制器放入
all class.js
,这使得动态控制器的加载是绝对的(如果控制器已经下载并且在
all class.js
中的所有剩余内容都可用,为什么要动态加载?)@bhovhannes我在开发时看到了缺点,但请注意,这只是确保类的存在。我个人使用服务器端驱动的方法,其中前端由用户角色创建。我知道我的控制器在我调用它们时已经存在,这就是你应该关心的。但我必须承认,我不太习惯Sencha CMDtool.Maybee有一个参数允许您在构建过程中包含整个文件夹,这可能是您正在寻找的解决方案。我在build.xml中添加了一个代码,当我执行
sencha app build
时,它会将我的控制器的所有名称收集到
uses
数组中。这样,我在开发过程中不会在
uses
数组中填充任何内容eDevelopment,只需将控制器添加到
controller
文件夹中,因为所有控制器都是从我的应用程序动态加载的。@JosvicZammit,请查看和。第一个是我的app.js,第二个是我的build.xml。我的所有控制器都位于/app/controller文件夹中,只有main.app controller加载在startup@bhovhannes谢谢分享!如果您不介意我将添加该代码,以便提供更好的质量