Ext Controller与ViewController的区别详解

为组件添加事件,就要用到控制器了。Extjs5提供了两种控制器:Controller和ViewController,这两种控制器都继承自BaseController。从功能上来讲,两者的大多数功能都是一致的,也就是说,在不严格区分的情况下,这两者选哪个都能用。从作用范围上讲,Controller范围比较大,属于应用级别的,ViewController范围比较小,属于界面级别的,也就是说Controller一般用于控制整个app,ViewController一般用于控制app中的某一个view。

 

在Extjs4中,只有Controller。Extjs4 MVC中,Application一开始时,就加载所有的Controller(有些人用了其他的方法避免了这个问题,有兴趣可以上网查下),其生命周期和我们的Application是一样的。这里就存在一些问题了,一般来讲,Application开始运行时,我们只需要加载首页的相关内容就行,其他页面由于没有显示,就无需加载了。例如我们首页是页面A,在A中点击某个按钮能跳到页面B,比较好的做法是,B页面的View和Controller我们可以在A中点击按钮之后才加载,没有必要再加载A页面的同时也加载B页面,但是前面讲了,Application开始时,就加载了所有的Controller,无论当前有没用到,都加载了,并且跟随着Application的生命周期一同存在,并且Controller里面还需要加载其控制的View,那么就相当于Application一开始,就把所有东西都加载进来了,性能和效率都是比较差的。

 

在Extjs5中,针对于Controller存在的问题,新增了ViewController。ViewController无需在Application开始时就加载,只有在使用了某个View时,才在View中加载其对应的ViewController,所以说ViewController是控制页面级别的。

 

根据前面的解释,似乎我们为导航栏添加控制器,应该使用Controller。但是,这里我还是使用ViewController。只要使用ViewController的View不销毁,那么ViewController也一样一直存在于Application中,一样能达到Controller的效果。所以,当我前面讲的都是废话吧。

 

为什么不用Controller呢?在官方的文档中有这么一段话“While Ext JS 5 is backwards compatible with current controllers, itintroduces a new type of controller designed to handle these challenges:Ext.app.ViewController.”,我翻译为:“Ext JS 5在向后兼容目前的控制器的同时,也引入了一个新的控制器设计来处理这些挑战(我们前面讲的Controller存在的问题):Ext.app.ViewController”,并且我们发现,在用senchacmd5 生成的Extjs5项目结构中,并没有controller这个包,而在extjs 4的项目中,是有这个包的。所以,我认为,Controller之所以存在,是为了兼容旧版本,新版本中,我们应该使用ViewController。但是有一点需要说明的是,ViewController对Controller做了简化,有些方法Controller里有而ViewController里没有,所以不排除有些时候你只能用Controller。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值