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


顶部和底部区域已经作好,在顶部区域有一个菜单的button。这一节我们设计一个菜单的数据结构,使其能够展示出不相同式的菜单。因为准备搭建的是一个系统模块自己定义的系统,因此菜单也是自己定义的,在操作员系统登录的时候,和MainModel中的其它数据一样,将会通过ajax载入要显示的菜单数据。然后生成菜单栏或者菜单树。在这个样例中,我仅仅做了二层菜单。要做三层以上的仅仅要稍作改动就可以。

以下先来看看菜单数据的定义:在MainModel中。在data属性下定义一个systemMenu的数组属性,以下就放了各个菜单项和菜单栏的数据定义。

				// 系统菜单的定义。这个菜单能够是从后台通过ajax传过来的
systemMenu : [{
text : 'project管理', // 菜单项的名称
icon : '', // 菜单顶的图标地址
glyph : 0,// 菜单项的图标字体的数值
expanded : true, // 在树形菜单中是否展开
description : '', // 菜单项的描写叙述
items : [{
text : 'project项目', // 菜单栏的名称
module : 'Global', // 相应模块的名称
icon : '', // 菜单栏的图标地址
glyph : 0xf0f7
// 菜单栏的图标字体
}, {
text : 'project标段',
module : 'Project',
icon : '',
glyph : 0xf02e
}] }, {
text : '合同管理',
expanded : true,
items : [{
text : '项目合同',
module : 'Agreement',
glyph : 0xf02d
}, {
text : '合同付款计划',
module : 'AgreementPlan',
glyph : 0xf03a
}, {
text : '合同请款单',
module : 'Payment',
glyph : 0xf022
}, {
text : '合同付款单',
module : 'Payout',
glyph : 0xf0d6
}, {
text : '合同发票',
module : 'Invoice',
glyph : 0xf0a0
}]
}, {
text : '综合查询',
glyph : 0xf0ce,
expanded : true,
items : [{
text : '项目合同台帐',
module : 'Agreement',
glyph : 0xf02d
}, {
text : '合同付款计划台帐',
module : 'AgreementPlan',
glyph : 0xf03a
}, {
text : '合同请款单台帐',
module : 'Payment',
glyph : 0xf022
}, {
text : '合同付款单台帐',
module : 'Payout',
glyph : 0xf0d6
}, {
text : '合同发票台帐',
module : 'Invoice',
glyph : 0xf0a0
}] } ]

上面菜单中定义了三个菜单项。若干个菜单栏。详细的属性上面有说明。有了菜单数据。再编制一个能够依据这些数据生成菜单展示数据的函数,这个函数返回的数组能够直接供toolbar和button作为items和menu来使用。以下这个函数也是在MainModel.js中。

			// 依据data.systemMenu生成菜单栏和菜单button以下使用的菜单数据
getMenus : function() {
var items = [];
var menuData = this.get('systemMenu'); // 取得定义好的菜单数据
Ext.Array.each(menuData, function(group) { // 遍历菜单项的数组
var submenu = [];
// 对每个菜单项。遍历菜单栏的数组
Ext.Array.each(group.items, function(menuitem) {
submenu.push({
mainmenu : 'true',
moduleName : menuitem.module,
text : menuitem.text,
icon : menuitem.icon,
glyph : menuitem.glyph,
handler : 'onMainMenuClick' // MainController中的事件处理程序
})
})
var item = {
text : group.text,
menu : submenu,
icon : group.icon,
glyph : group.glyph
};
items.push(item);
})
return items;
}

以下继承toolbar自己定义一个菜单栏的控件。在war/app/view/main/region文件夹下建立文件MainMenuToolbar.js。

/**
* 系统的主菜单栏,依据MainModel中的数据来生成,能够切换至button菜单,菜单树
*/
Ext.define('app.view.main.region.MainMenuToolbar', {
extend : 'Ext.toolbar.Toolbar',
alias : 'widget.mainmenutoolbar', defaults : {
xtype : 'buttontransparent'
}, items : [{
glyph : 0xf100,
tooltip : '在左边栏中显示树状菜单', // 几种菜单样式切换的button
disableMouseOver : true,
margin : '0 -5 0 0'
}, {
glyph : 0xf102,
tooltip : '在顶部区域显示菜单',// 几种菜单样式切换的button
disableMouseOver : true
}], viewModel : 'main', // 指定viewModel为main initComponent : function() { // 把ViewModel中生成的菜单items加到此toolbar的items中
this.items = this.items.concat(this.getViewModel().getMenus()); this.callParent();
}
});

至此菜单栏控件制作完毕,以下要把其增加到Main的界面之中。

首先在Main.js的uses之中引入

'app.view.main.region.MainMenuToolbar'。然后在items中将菜单toolbar加进去。

			items : [{
xtype : 'maintop',
region : 'north' // 把他放在最顶上
}, {
xtype : 'mainmenutoolbar',
region : 'north' // 把他放在maintop的以下
}, {
xtype : 'mainbottom',
region : 'south' // 把他放在最底下
}, {
region : 'center', // 中间面版
xtype : 'maincenter'
}]

一个菜单栏就增加到了系统之中,来看一下效果。

系统中我共设置了4种类型的菜单,各自是:

  • 菜单button:在顶部的“菜单”button之下。
  • 菜单栏:在顶部区域以下,刚做好的那个就是。

  • 菜单树:显示在左边区域的菜单树。
  • 折叠式菜单:显示在左边区域的还有一种方式。
这几种菜单之间能够非常方便的切换,假设觉得太多了不是必需,能够把不喜欢的取消掉。全部的界面都是用控件搭起来的,所以要添加一种菜单风格或取消一种都非常方便。

跟我一起学extjs5(08--自己定义菜单1)的更多相关文章

  1. 跟我一起学extjs5(11--自己定义模块的设计)

    跟我一起学extjs5(11--自己定义模块的设计)        从这一节開始我们来设计并完毕一个自己定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息. 下面信息仅仅是我自己在开发过程中 ...

  2. 与我一起extjs5(09--其定义菜单2)

    跟我一起学extjs5(09--自己定义菜单2)         这一节来定义另外三种类型的菜单类. 首先定义菜单button类.文件放于app/view/main/region文件夹以下,文件名称为 ...

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

    跟我一起学extjs5(22--模块Form的自己定义的设计)         前面几节完毕了模块Grid的自己定义,模块Form自己定义的过程和Grid的过程类似,可是要更复杂一些.先来设计一下要完 ...

  4. 跟我一起学extjs5(24--模块Form的自己定义的设计[2])

    跟我一起学extjs5(24--模块Form的自己定义的设计[2])         在本节中将要增加各种类型的字段,在增加字段的时候因为能够一行增加多个字段,因此层次结构又多了一层fieldcont ...

  5. 跟我一起学extjs5(16--各种Grid列的自己定义渲染)

    跟我一起学extjs5(16--各种Grid列的自己定义渲染)         Grid各列已经可以展示出来了.列的类型包含字符型,整型,浮点型,货币型,百分比型,日期型和布尔型,我自己定义了各种类型 ...

  6. 跟我一起学extjs5(25--模块Form的自己定义的设计[3])

    跟我一起学extjs5(25--模块Form的自己定义的设计[3])         自己定义的Form已经能够执行了,以下改一下配置,把Form里面的FieldSet放在Tab之下.改动一下Modu ...

  7. 跟我一起学extjs5(05--主界面上增加顶部和底部区域)

    跟我一起学extjs5(05--主界面上增加顶部和底部区域)         这一节为主界面加一个顶部区域和底部区域. 一个管理系统的界面能够粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状 ...

  8. 跟我一起学extjs5(17--Grid金额字段单位MVVM方式的选择)

    跟我一起学extjs5(17--Grid金额字段单位MVVM方式的选择)         这一节来完毕Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,整体上和控制菜单的几种模式类似.首先 ...

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

    跟我一起学extjs5(13--运行菜单命令在tabPanel中显示模块)         上面设计好了一个模块的主界面,以下通过菜单命令的运行来把这个模块增加到主界面其中. 在MainModule. ...

随机推荐

  1. 聚类:(K-means)算法

    1.归类: 聚类(clustering) 属于非监督学习 (unsupervised learning) 无类别标记(class label) 2.举例: 3. K-means 算法:         ...

  2. CF 586A 找1的个数和101的个数

    Sample test(s) input 50 1 0 1 1 output 4 input 71 0 1 0 0 1 0 output 4 input 10 output 0 # include & ...

  3. android拾遗——AlarmManager的使用

    AlarmManager的作用文档中的解释是:在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Inten ...

  4. 基于CommonsChunkPlugin,webpack打包优化

    前段时间一直在基于webpack进行前端资源包的瘦身.在项目中基于路由进行代码分离,http://www.cnblogs.com/legu/p/7251562.html.但是打包的文件还是很大,特别是 ...

  5. .size和.empty

    坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)? 能用empty的时候,不要用size empty可以保证常量复杂度,但list的size不保证 链表长度必须要遍历全部的 ...

  6. 流程设计器jQuery + svg/vml(Demo7 - 设计器与引擎及表单一起应用例子)

    去年就完成了流程设计器及流程引擎的开发,本想着把流程设计器好好整理一下,形成一个一步一步的开发案例,结果才整理了一点点,发现写文章比写代码还累,加上有事情要忙,结果就.. 明天要去外包驻场了,现把流程 ...

  7. 【51nod】1934 受限制的排列

    题解 这题还要判无解真是难受-- 我们发现我们肯定能确定1的位置,1左右的两个区间是同理的可以确定出最小值的位置 我们把区间最小值看成给一个区间+1,构建出笛卡尔树,就求出了每一次取最小值和最小值左右 ...

  8. SpringSecurity3基础篇

    Spring Security 是一种基于Spring AOP 和Servlet过滤器的安全框架,它提供了全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Fra ...

  9. java的组合和继承

    其实我第一次学习java 的时候根本没有听说过组合这个名词,老师也更没有讲解过,我一直以为是我自己落掉了什么知识点,其实不是的,组合这个名词暂且把它定义为一个思维性的东西吧,相信读者都接触过了,但是并 ...

  10. 交换机高级特性MUX VLAN

    MUX VLAN 基本概念 lMUX VLAN(Multiplex VLAN)提供了一种通过VLAN进行网络资源控制的机制. 例如,在企业网络中,企业员工和企业客户可以访问企业的服务器. 对于企业来说 ...