ExtJs动态开始菜单
2017-06-26 16:11
78 查看
ExtJs Desktop桌面开始菜单动态生成
ExtJs框架是目前市面上采用比较成熟的js框架,有着诸多优点特别适合用来实现一些内部的管理信息系统.ExtJs提供了一套组件来开发类似于windows桌面的单页面系统,其中desktop桌面的开始菜单按照后台提供的数据动态生成也是一个难点,下面将对desktop桌面动态开始菜单的生成进行介绍。ExtJs官方提供了desktop桌面的demo,其中关于开始菜单的生成是静态的方式,在js脚本中设置好了固定的开始菜单内容再生成开始菜单。本文的讲解内容均是在官方demo基础上进行的修改
整个需要改进的脚本只有两个一个是根目录下的App.js以及BogusModule.js,前台与后台之间通过Ajax交互,数据交换个是为json
后台定义了Mids类,如下所示:
public class Mids { private String mid; //菜单id private String text; //菜单名词 private String path; //菜单路径 private List<Mid> subs; //子菜单 //Mid作为Mids内部类 public class Mid { private String mid; private String text; private String path; } }
因此前后台交互的json数组示例如下:
[{mid:”m1”,text:”菜单1”,path:”/m1”,subs:null},{mid:”m2”,text:”菜单2”,path:”/m1”,subs:[mid:”m21”,text:”菜单21”,path:”/m21”}]
接下来我们就要修改App.js这个js文件
getModules : function(){ // return [ // //new MyDesktop.Blockalanche(), // //new MyDesktop.BogusMenuModule(), // //new MyDesktop.BogusModule() // // ]; return mArr; },
//找到这段代码并注释掉部分行并修改为return mArr,其中mArr就是开始菜单模块会在另一个js文件中定义
下面我们就看核心的BogusModule.js这个文件,这个文件定义了开始菜单的生成方式和类型
//首先需要定义一个模块类型MyDesktop.BogusModule Ext.define( 'MyDesktop.BogusModule', { extend: 'Ext.ux.desktop.Module', init:function () {}, createWindow: function (obj) { var desktop = this.app.getDesktop(); createWindow(desktop,obj);//该方法另外定义 } });
菜单数组以及Menu模型与后台传递的json数据进行绑定
var mArr = []; Ext.define('Menu', { extend: 'Ext.data.Model', fields: ['mid', 'text', 'path','subs'] }); //
定义了一个store采用Ajax方式与后台进行是数据交互store进行数据加载并实现开始菜单动态加载和绑定,并且生成桌面
var store = Ext.create('Ext.data.Store', { model: 'Menu', proxy: { type: 'ajax', url: 'menu', reader: 'json' } }); store.load({ scope: this, callback: function (r, op, success) { if (success) { for (var i = 0; i < r.length; i++) { var menu = Ext.define('MyDesktop.materialMenu', { extend: 'MyDesktop.BogusModule', init: function () { var mm=this; //判断是否有子菜单,有子菜单则设置为点击无效 if (r[i].data.subs) { mm.launcher = { text: r[i].data.text, iconCls: 'bogus', handler: function () { //有子菜单则点击无效 return false; }, menu: {items: []} }; //遍历子菜单数据并生成子菜单项 Ext.Array.each(r[i].data.subs, function (m, index, allItems) { mm.launcher.menu.items.push({ text: m.text, iconCls: 'bogus', handler: function (src) { var desktop = mm.app.getDesktop(); createWindow(desktop,src); }, //scope: this, src: m.path, windowId: m.mid }); }); } else { //没有子菜单则设置点击打开窗口 mm.launcher = { text: r[i].data.text, iconCls: 'bogus', handler: this.createWindow, scope: this, src: r[i].data.path, windowId: r[i].data.mid }; } } }); mArr.push(new menu()); } // 生成桌面 var myDesktopApp; Ext.onReady(function () { myDesktopApp = new MyDesktop.App(); }); } } });
定义对应的打开窗口模块,每个窗口模块均内嵌了一个iframe,通过该iframe可以加载其它页面内容
function createWindow(desktop,obj) { var win = desktop.getWindow('bogus' + obj.windowId); if (!win) { var iframeId = 'bogus_' + obj.windowId; win = desktop .createWindow({ id: 'bogus' + obj.windowId, title: obj.text, //width: 800, //height: 600, maximizable: true, maximized: true, closable: true, resizable: true, html: "<iframe id='" + iframeId + "' style='width:100%;height:100%;border:0px;margin:0px;padding:0px;' frameborder='0' src=''></iframe>", iconCls: 'bogus', animCollapse: false, constrainHeader: true, listeners: { afterrender: function () { document .getElementById(iframeId).src = obj.src; } }, buttons: [ { text: '刷新窗口内容', handler: function () { document .getElementById(iframeId).src = obj.src; } }, { text: '切换窗口大小', handler: function () { win.toggleMaximize(); } }, { text: '关闭', handler: function () { win.close(); } }] }); } win.show(); return win; }
这样就完成了ExtJs桌面的动态开始菜单生成
相关文章推荐
- Extjs2.0 desktop 动态创建桌面图标和开始菜单
- extjs 开始菜单动态生成
- Extjs 如何动态添加window的items项
- extjs表单中动态添加items
- 关于extjs中动态添加TabPanel的tab项并以iframe显示的整理
- Extjs 动态Gird【列名动态创建】
- ExtJS 4中动态加载的路径设置
- [导入]用ExtJS 实现动态载入树(Load tree)
- Extjs3.0 checkboxGroup 动态添加
- Extjs4.2 TreePanel+Asp.net mvc 动态加载节点
- Extjs5.1 柱状图动态加载
- Extjs中左边treepanel右边panel动态加载jsp页面
- ExtJS 4.1 TabPanel动态加载页面并执行脚本
- extjs的tree的使用(拖动、动态载入json数据、拖动后的事件处理)
- Extjs 为panel动态添加html页面
- ExtJS 动态增加与删除items,动态设置textField可见与否
- Extjs4——实现动态的grid(即实现数据库表数据的显示)
- ExtJs创建动态树的方法
- ExtJs通过后台动态创建树
- extjs 动态设定 DateField 最大值 最小值