常规功能和模块自定义系统 (cfcmms)—011选择菜单后的执行过程
2015-10-02 19:55
661 查看
常规功能和模块自定义系统 (cfcmms)—011选择菜单后的执行过程
菜单的生成具体见下面一段代码,getMenus获取第一层菜单的items,在getaMenu函数中用了递归来生成各级子菜单。在各个可执行的菜单条中加入了菜单类型、模块名称、图标、handler的执行事件。// 根据data.tf_MenuGroups生成菜单条和菜单按钮下面使用的菜单数据 getMenus : function() { var items = []; Ext.Array.each(this.get('menus'), function(group) { // 遍历菜单项的数组 items.push(this.getaMenu(group)); }, this); return items; }, /** * 根据group来返回该menu和所有的子menu */ getaMenu : function(group) { var items = []; // 菜单的类型 group ,module, reportGroup, report, function, // window, executestatement,separate Ext.each(group.tf_Menus, function(submenu) { if (submenu.menuType === 'group') { items.push(this.getaMenu(submenu)); } else if (submenu.menuType === 'separate') items.push('-'); else { items.push({ menuType : submenu.menuType, // 菜单类型 menuTypeId : submenu.menuTypeId, moduleName : submenu.moduleName, // 模块名称 text : submenu.title, // 如果没有在菜单中设置icon,则看看module是否设置了icon icon : submenu.tf_iconUrl || submenu.moduleIconUrl, // 如果没有在菜单中设置glyph,则看看module是否设置了glyph iconCls : submenu.tf_iconCls || submenu.moduleiconCls, handler : 'onMainMenuClick' // MainController中的事件处理程序 }); } }, this); return { text : group.title, menu : items, iconCls : group.tf_iconCls, icon : group.tf_iconUrl }; }在源代码里,生成菜单条和按钮菜单使用的是上面的函数。生成树状菜单的和上面的类似,具体的代码在源文件中看得到。
在用户单击了一个菜单按钮后,将会执行MainController.js中的onMainMenuClick函数。
// 选择了主菜单上的菜单后执行 onMainMenuClick : function(menuitem) { // menuType ,module, reportGroup, report, function, // window, executestatement if (menuitem.menuType === 'module' || menuitem.menuType === 'reportGroup' || menuitem.menuType === 'report') this.addModuleToCenter(menuitem); else // 其他类型的菜单选中后的执行 ; }在上面的函数中,会判断将要执行的菜单命令的类型,如果是模块、综合查询分组或者是某个查询,会去执行CenterController.js中的addModuleToCenter函数。这里为什么在函数前使用this呢,这是由于在MainController.js中加入了mixins属性。这个属性基本上等同于多重继承的意思。
// 混合设置,可以理解为多重继承,本类将继承下面的三个类中的方法 mixins : { // 对grid中界面进行改变的控制器 gridController : 'app.view.main.controller.GridController', // 对中央区域界面进行改变的控制器 centerController : 'app.view.main.controller.CenterController', // 对左边菜单界面进行改变的控制器 leftController : 'app.view.main.controller.LeftController' }
在CenterController.js中会去执行将模块加入到主区域中的函数。
/** * 点击了一个菜单项以后,加入到主区域的tabPanel中 */ addModuleToCenter : function(menuitem) { console.log('addModuleToCenter : ' + menuitem.menuType + ',' + menuitem.text + ',' + menuitem.moduleName); var maincenter = this.getView().down('maincenter'); // 对于设置了reference的控件,可以直接在控制器中使用下面的函数来查找得到。 如果你还是使用getCmp来取得控件的话,那得改改了。 // var maincenter = this.lookupReference('maincenter'); if (menuitem.menuType === 'module') { this.addModuleToMainRegion(menuitem.moduleName); } else if (menuitem.menuType === 'reportGroup') this.addReportToMainRegion({ reportGroupId : menuitem.menuTypeId, text : menuitem.text }); }, /** * 将标准模块加入tabpanel中了,如果已经有了,就转至该tab页 itemId:module_(moduleName) */ addModuleToMainRegion : function(moduleName) { var module = app.modules.getModule(moduleName); if (moduleName) { var view = this.getView().down('maincenter'); var tabItemId = 'module_' + moduleName; // tabPanel中的itemId var tab = view.down('> panel#' + tabItemId);// 查找当前主区域中是否已经加入了此模块了 if (!tab) { // 如果当前模块没有加入的话,去生成当前模块的控件 tab = view.add(app.modules.getModule(moduleName).getModulePanel( tabItemId)); } view.setActiveTab(tab); } }
至此,一个菜单的点击,就可以把一个模块加入到主显示区域之中了。
相关文章推荐
- 如何成为一名架构师?
- parse in programming
- gnome-logs开发记录2--合并git的多个commit--Gnome开发记录
- gnome-logs开发记录3--修复bug726228+杂记
- 博主前来报道
- .Net 学习经验
- Android 学习论坛博客及网站推荐
- parse in programming
- gnome-logs开发记录3--修复bug726228+杂记
- New files creation and Makefile
- 移动客户端设计开发经验(1)-流程篇(原创理论)
- C#Winform开发经验之Combox键值对
- C# WebBrowser 之 按键获取
- java开发经验
- 继承建模小得
- 要成为Java高手需要注意的25个学习目标
- jquery模拟java集合中的map
- smtp 邮件服务器编程
- iOS 开发学习摘要: 1. 了解 iOS 的UI设计原则
- 微信公众平台开发过程