ext mvc 动态加载

      ext是重型框架,在做项目的时候,我们经常面临性能问题,最明显的就是加载缓慢!由于项目亲身体会,我开始研究mvc的动态加载,也网上搜集过许多资料,包括ext官网提供的资料http://dev.sencha.com/deploy/ext-4.0.7-gpl/docs/index.html#!/guide/application_architecture,但是讲解的都不是我需要的,下面是我自己总结的,希望能帮助到需要的人。

       首先介绍下将要给大家展示的实例的场景:实例项目中有4个模块,分别是主界面(对应下去中的main),用户(对应下图中的user.Listuser.EditWin),记事本(对应下图中的user.NoteBook),测试模块(对应下图中的user.Test),我们想要的结果是用户打开界面时,看到的是主界面,系统只加载与主界面有关的js,当点击用户列表的时候,再加载用户模块的js文件,以此类推。下图是js结构:

如果我们按照下图中写我们的app.js

这样,在运行的时候,系统会一次性把所有需要的js文件全部加载到界面,如下图:

这里,虽然看上去也是用了mvc框架,实际上没有达到想要的效果。所以我们首先要做的是去掉主页中不需要的controlsmodelsstores等等,如下图:

这样就精简多了。再看一下加载效果

这个时候惊奇的发现,除了系统必要的文件外,请求的js只是主页中的Main.js这一个。接下来我们要点击‘userList’这个button来加载用户列表,来看看UsersControl的结构:

这里指明了用户模块所需要的全部js文件,再看看主页中的‘userList’这个button,看看是如何动态请求UsersControl的:

Button事件首先是调用Ext.require函数,像框架请求控制类UsersControl,接下来在回调函数中获得该控制类,var uc = application.getController('UsersControl'),这一步是必要的,确保该控制类运行环境完全建立。注意,这用了个全局变量application,他是Ext.app.application这个局部变量,所以要在之前就要把ext的这个局部变量赋值给全局变量application,这个动作要在app.js里完成,如下图:

之后,我们用var v = Ext.getCmp('userList')去获得用户列表,注意,如果是首次点击,因为还没有创建该组件,因此结果为undefined,要用v =Ext.widget('userList')去创建该组件,这样要求我们的组件必须要起别名方便这里创建组件。uc.init(application)是调用控制类的初始化函数,如果没有,这里可以省略。我们来看看运行效果:

这里可以发现,后面的用户模块的js是点击后才动态加载的,其他的模块也是类似,这样就达到了按需所求的目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值