ExtJs动态开始菜单
来源:互联网 发布:sql%20server 编辑:程序博客网 时间:2024/05/20 15:59
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桌面的动态开始菜单生成
- extjs 开始菜单动态生成
- ExtJs动态开始菜单
- extjs desktop startmenu (开始菜单)
- extjs动态添加TabPanel
- ExtJS GridPanel动态列
- extjs 动态添加MenuItem
- extjs动态显示图片
- extjs json 动态树
- extjs动态树从无到有
- extJs+JSON 动态树
- Extjs combox 动态加载
- ExtJS GridPanel动态列
- ExtJS 动态添加checkboxgroup
- extjs 动态显示图片
- ExtJs 动态树
- extjs 动态radio创建
- Extjs 动态Tree
- extjs 动态加载
- java的IO之输入和输出概述
- SwipeMenuRecyclerView添加头部和底部
- 详解CSS中:nth-child的用法
- select 和 epoll的区别
- 数据应用达人之SQL基础教程分享8-子查询、连接、组合查询
- ExtJs动态开始菜单
- Linux常用命令
- chrome浏览器开发者工具的使用
- 利用MyEclipse创建一个applet小应用程序
- jedis reids java
- Android开发,Kotlin的了解与学习(九)-----在Android上的具体应用
- C++新特性auto关键字的理解与使用
- 使用 Android Studio 为 Android 创建一个简单的 Kotlin 应用程序
- Java笔试题解-枚举类型(2)