跟我一起学extjs5(09--自定义菜单2)

跟我一起学extjs5(09--自定义菜单2)

这一节来定义另外三种类型的菜单类。首先定义菜单按钮类。文件放于app/view/main/region目录下面,文件名为ButtonMainMenu.js。

/**
 * 显示在顶部的按钮菜单,可以切换至标准菜单,菜单树
 */
Ext.define('app.view.main.region.ButtonMainMenu', {

			extend : 'app.ux.ButtonTransparent',

			alias : 'widget.buttonmainmenu',

			viewModel : 'main',

			text : '菜单',
			glyph : 0xf0c9,

			initComponent : function() {

				this.menu = this.getViewModel().getMenus();

				this.callParent();
			}

		})

第二种树状菜单,文件名为MainMenuTree.js。

/**
 * 树状菜单,显示在主界面的左边
 */
Ext.define('app.view.main.region.MainMenuTree', {
			extend : 'Ext.tree.Panel',
			alias : 'widget.mainmenutree',
			title : '系统菜单',
			glyph : 0xf0c9,
			rootVisible : false,
			lines : true,
			viewModel : 'main',

			initComponent : function() {
				this.store = Ext.create('Ext.data.TreeStore', {
							root : {
								text : '系统菜单',
								leaf : false,
								expanded : true
							}
						});
				var menus = this.getViewModel().get('systemMenu');
				var root = this.store.getRootNode();
				for (var i in menus) {
					var menugroup = menus[i];
					var menuitem = root.appendChild({
								text : menugroup.text,
								expanded : menugroup.expanded,
								icon : menugroup.icon,
								glyph : menugroup.glhpy
							});
					for (var j in menugroup.items) {
						var menumodule = menugroup.items[j];
						var childnode = {
							moduleId : menumodule.text,
							moduleName : menumodule.module,
							text : menumodule.text,
							leaf : true
						};
						menuitem.appendChild(childnode);
					}
				}
				this.callParent(arguments);
			}
		})

第三种为折叠式菜单,文件名为AccordionMainMenu.js。

/**
 * 折叠式(accordion)菜单,样式可以自己用css进行美化
 */

Ext.define('app.view.main.region.AccordionMainMenu', {
			extend : 'Ext.panel.Panel',
			alias : 'widget.mainmenuaccordion',
			title : '系统菜单',
			glyph : 0xf0c9,

			layout : {
				type : 'accordion',
				animate : true
			},

			viewModel : 'main',

			initComponent : function() {
				this.items = [];
				var menus = this.getViewModel().get('systemMenu');
				for (var i in menus) {
					var menugroup = menus[i];
					var accpanel = {
						menuAccordion : true,
						xtype : 'panel',
						title : menugroup.text,
						bodyStyle : {
							padding : '10px'
						},
						layout : 'fit',
						dockedItems : [{
									dock : 'left',
									xtype : 'toolbar',
									items : []
								}],
						glyph : menugroup.glyph
					};
					for (var j in menugroup.items) {
						var menumodule = menugroup.items[j];
						accpanel.dockedItems[0].items.push({
									xtype : 'buttontransparent',
									text : this.addSpace(menumodule.text, 12),
									glyph : menumodule.glyph,
									handler : 'onMainMenuClick'
								});
					}
					this.items.push(accpanel);
				}
				this.callParent(arguments);
			},

			addSpace : function(text, len) {
				console.log(text.length);
				var result = text;
				for (var i = text.length; i < len; i++) {
					result += ' ';
				}
				return result;
			}

		})

把这三种类型的菜单加入到页面中。先修改Top.js,引入按钮菜单类

			uses : ['app.ux.ButtonTransparent', 'app.view.main.region.ButtonMainMenu'],

然后在items中加入

{
						xtype : 'buttonmainmenu'
					}

再修改Main.js,引入MainMenuTree 和 AccordionMainMenu,在items中加入

{
						xtype : 'mainmenutree',
						region : 'west', // 左边面板
						width : 250,
						split : true
					}, {
						xtype : 'mainmenuaccordion',
						region : 'west', // 左边面板
						width : 250,
						split : true
					},

经过以上处理,现在界面上会有4种类型的菜单。见下图:

跟我一起学extjs5(09--自定义菜单2),布布扣,bubuko.com

时间: 2024-10-01 05:21:12

跟我一起学extjs5(09--自定义菜单2)的相关文章

跟我一起学extjs5(08--自定义菜单1)

跟我一起学extjs5(08--自定义菜单1) 顶部和底部区域已经作好,在顶部区域有一个菜单的按钮,这一节我们设计一个菜单的数据结构,使其可以展示出不同样式的菜单.由于准备搭建的是一个系统模块自定义的系统,因此菜单也是自定义的,在操作员系统登录的时候,和MainModel中的其他数据一样,将会通过ajax加载要显示的菜单数据,然后生成菜单条或者菜单树.在这个例子中,我只做了二层菜单,要做三层以上的只要稍作修改即可. 下面先来看看菜单数据的定义:在MainModel中,在data属性下定义一个sy

跟我一起学extjs5(13--执行菜单命令在tabPanel中显示模块)

跟我一起学extjs5(13--执行菜单命令在tabPanel中显示模块) 上面设计好了一个模块的主界面,下面通过菜单命令的执行来把这个模块加入到主界面当中.在MainModule.js中有一个函数,生成了当前的菜单数据: // 根据data.systemMenu生成菜单条和菜单按钮下面使用的菜单数据 getMenus : function() { var items = []; var menuData = this.get('systemMenu'); // 取得定义好的菜单数据 Ext.A

跟我一起学extjs5(41--增加一个自定义模块(源码下载)[2销售合同加入菜单和模块展示])

跟我一起学extjs5(41--增加一个自定义模块[2销售合同加入菜单和模块展示]) 在前面一节销售合同模块的信息导入系统后,需要在菜单中加入这个模块,但是现在菜单模块没法利用此系统进行编辑(多模块的层次现在还没有加入),因此只能在数据库里加入一条记录了: 加入后,重新启动一下tomcat,进入系统,就能在菜单"合同管理"下,看到 "销售合同"的菜单条了,点击一下,看看结果吧. 以上是自动生成"销售合同"的模块界面,这个就是最初介绍的模块的列表.

跟我一起学extjs5(30--加入模块和菜单定义[3后台系统数据的组织和生成])

跟我一起学extjs5(30--加入模块和菜单定义[3后台系统数据的组织和生成]) 对于大多web程序来说,后台是完成控制和处理的,前台就是一个展示工具,这个系统也是这样.在上一节中建立了四个模块,下面开始设计前后台的交互.将系统信息和模块.菜单信息传到前台,由前台来进行展示. 首先新建一个java bean类用来存放各种需要传到前台的数据,里面包括:系统信息.操作人员信息.服务人员信息.模块信息.菜单.现在只加入了这几个,以后还要加入各种 各样的权限设置.在com.jfok.server.co

跟我一起学extjs5(28--加入模块和菜单定义[1建立数据库和表])

跟我一起学extjs5(28--加入模块和菜单定义[1建立数据库和表]) 下面我们开始进入自定义系统的设计和各个组成部分的搭建工作. 首先在sql server中建立数据库,这里的数据的名字我定义为extjs5,然后需要建立模块的定义表,这个表里将存着系统中所有模块的定义信息.为了能有个直观的前后台的互动,先把模块和菜单这二个部分加进去,可以把菜单数据组织好后发送到前台去进行展示. 由于系统中的模块很多,需要分类,因此在先要设计一个"模块分组"的表,对于菜单也是一样,需要有一个&quo

跟我一起学extjs5(29--加入模块和菜单定义[2建立java bean])

跟我一起学extjs5(29--加入模块和菜单定义[2建立java bean]) 对上一节中加入的4个模块在java中建立相应的bean文件. 以上表建立好以后,需要建立java bean文件.在建立之前需要加入几个支持类. 先在com.jfok.server.common中建立包annotation,再在下面加入二个类库,这二个是自定义的注释类.分别用来注释每一个模块的信息和模块中每一字段的信息. package com.jfok.server.common.annotation; impor

跟我一起学extjs5(36--单个模块的设计[4根据菜单建立相应的模块])

跟我一起学extjs5(36--单个模块的设计[4根据菜单建立相应的模块]) 前几节处理好了后台,现在又要处理前台了.首先是要修改菜单的选择事件,在创建一个module的时候将 moduleName参数传递进去. 修改MainController.js中的函数: // 选择了主菜单上的菜单后执行 onMainMenuClick : function(menuitem) { var maincenter = this.getView().down('maincenter'); maincenter

跟我一起学extjs5(22--模块Form的自定义的设计)

跟我一起学extjs5(22--模块Form的自定义的设计) 前面几节完成了模块Grid的自定义,模块Form自定义的过程和Grid的过程类似,但是要更复杂一些.先来设计一下要完成的总体目标. 1?可以有多个Form方案,对应于显示.新增.修改.审核.审批等功能: 2?对于上述各种功能可以选择不同的Form方案,比如说修改可以有几个方案,各个操作员可以选择他们感兴趣的Form方案来进行数据的修改. 3?每个Form方案中可以定义若干个字段分组(FieldSet或FieldContainer).

跟我一起学extjs5(23--模块Form的自定义的设计[1])

跟我一起学extjs5(23--模块Form的自定义的设计[1]) 下面开始设计和完成一个简单的Form的自定义过程.先准备数据,在ModuleModel.js中的data属性下面,加入自定义Form的参数定义,下面的代码中定义了一个新的属性tf_formSchemes,在这个属性下面可以定义多个formScheme,下面的例子中只加入了一个,在formScheme上,加了二个fieldSet,然后在fieldSet下面定义了若干个字段. // 模块的form方案,可以定义多个方案 tf_for