bho*_*nes 9 extjs build extjs4 sencha-cmd
我使用Ext JS 4. controllers属性创建了一个应用程序,app.js只包含主控制器:
Ext.application({
name: 'MyApp',
appFolder: 'app',
controllers: [
"main.App"
],
loadController: function(controller) {
var oController = this.getController(controller);
oController.init(this);
oController.onLaunch(this);
}
});
Run Code Online (Sandbox Code Playgroud)
MyApp.main.App控制器使用getController()方法按名称加载其他控制器(请参阅loadController()方法).这些控制器是动态加载的,不会列在我的index.html文件中.
为了生成部署到服务器的生产版本,我通过在我的应用程序文件夹中发出以下命令来使用Sencha Cmd:
sencha app build
Run Code Online (Sandbox Code Playgroud)
工具正常完成并将所有文件压缩为一个大的all-classes.js.问题是我的动态加载的控制器不包含在该文件中.
动态加载控制器(总共超过100个)的正确方法是由Sencha Cmd缩小和处理?
我知道,我可以在我的列表中列出它们app.js,或者包含在某个文件中Ext.require,但是我正在寻找正确的方法,在我的构建中自动包含100多个不同的控制器,视图,模型和存储.我相信Ext JS的其他用户正在创建大型应用程序并且正在以某种方式构建,我会感激任何建议或只是success stories,这将帮助我找到正确的构建方法.
我会将所有控制器放入uses数组中.这些应该强制工具跟踪它们并将它们包含在构建中.另一方面,使用不要求类在定义时可用,但保证它们在onReady(一个在应用程序内)块被调用时可用.
请注意,您需要在uses数组中使用完全限定名称!
我不使用buildtool因此我无法测试它但它应该工作.
从 @bhovhannes提供的评论示例更新
bhovhannes:我在build.xml中添加了一个代码,当我做sencha app build时,它会将我的控制器的所有名称收集到uses数组中.这样我在开发期间就不会填充使用数组,只需将控制器添加到控制器文件夹中,因为它们都是从 我的应用程序动态加载的
app.js
Ext.application({
name: 'MyApp',
appFolder: 'app',
controllers: [
"main.App"
],
uses: [
/*ant-generated-content-start*/ /*ant-generated-content-end*/
],
autoCreateViewport: true,
});
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)