开始为了这个问题查阅了很多文章,有些文章的实现过于复杂,比如多app文件夹的形式。其实我们来看Ext.create(参数)这个方法,其实他本身就提供了根据类名动态生成实现类的功能。比如我有一个Controller叫 core.role.controller.Role 那么我只需要Ext.create('core.role.controller.Role')就可以创建对象。也就实现了按需加载。当然这样也存在一个小问题。
在MVC的设计理念中Controller中主要是实现对个组件的监听工作,比如我们去监听主页面的点击,正常模式中会把监听写在组件中listener,在MVC模式中我们是通过Controller来监听点击事件。那么当我们点击左侧菜单,界面在右侧显示的时候我们会绑定右侧界面中各组件的监听事件。当我们关闭右侧页面时,组件会自动销毁,但是监听仍然存在,当我们在此打开此页面时,我们会发现我们的监听绑定了2次。下面附上此种问题的解决方案。
Ext.define('core.permission.controller.Permission', {
extend: 'Ext.app.Controller',
statics: {
needInit:true
},
init: function () {
this.show(); //show方法为初始化页面的方法
if (core.permission.controller.Permission.needInit) {
this.control({
'permissionList button[itemId=btnAdd]': {
click: this.addClick //addClick 方法省略
},
'permissionList button[itemId=btnEdit]': {
click: this.editClick //editClick 方法省略
}
})
core.permission.controller.Permission.needInit = false;
}
}
})
我们定义一个静态方法,通过这个静态方法来监听是否是第一次new,如果是则绑定监听,如果不是则跳过监听