ExtJS5_自定义菜单1
顶部和底部区域已经作好,在顶部区域有一个菜单的按钮,这一节我们设计一个菜单的数据结构,使其可以展示出不同样式的菜单。由于准备搭建的是一个系统模块自定义的系统,因此菜单也是自定义的,在操作员系统登录的时候,和MainModel中的其他数据一样,将会通过ajax加载要显示的菜单数据,然后生成菜单条或者菜单树。在这个例子中,我只做了二层菜单,要做三层以上的只要稍作修改即可。
下面先来看看菜单数据的定义:在MainModel中,在data属性下定义一个systemMenu的数组属性,下面就放了各个菜单项和菜单条的数据定义。
// 系统菜单的定义,这个菜单可以是从后台通过ajax传过来的
systemMenu : [{
text : '工程管理', // 菜单项的名称
icon : '', // 菜单顶的图标地址
glyph : 0,// 菜单项的图标字体的数值
expanded : true, // 在树形菜单中是否展开
description : '', // 菜单项的描述
items : [{
text : '工程项目', // 菜单条的名称
module : 'Global', // 对应模块的名称
icon : '', // 菜单条的图标地址
glyph : 0xf0f7
// 菜单条的图标字体
}, {
text : '工程标段',
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生成菜单条和菜单按钮下面使用的菜单数据
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中的数据来生成,可以切换至按钮菜单,菜单树
*/
Ext.define('app.view.main.region.MainMenuToolbar', {
extend : 'Ext.toolbar.Toolbar',
alias : 'widget.mainmenutoolbar', defaults : {
xtype : 'buttontransparent'
}, items : [{
glyph : 0xf100,
tooltip : '在左边栏中显示树状菜单', // 几种菜单样式切换的按钮
disableMouseOver : true,
margin : '0 -5 0 0'
}, {
glyph : 0xf102,
tooltip : '在顶部区域显示菜单',// 几种菜单样式切换的按钮
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之中引入
items : [{
xtype : 'maintop',
region : 'north' // 把他放在最顶上
}, {
xtype : 'mainmenutoolbar',
region : 'north' // 把他放在maintop的下面
}, {
xtype : 'mainbottom',
region : 'south' // 把他放在最底下
}, {
region : 'center', // 中间面版
xtype : 'maincenter'
}]
一个菜单条就加入到了系统之中,来看一下效果。
系统中我共设置了4种类型的菜单,分别是:
- 菜单按钮:在顶部的“菜单”按钮之下。
- 菜单条:在顶部区域下面,刚做好的那个就是。
- 菜单树:显示在左边区域的菜单树。
- 折叠式菜单:显示在左边区域的另一种方式。
这几种菜单之间可以很方便的切换,如果认为太多了没必要,可以把不喜欢的取消掉。所有的界面都是用控件搭起来的,所以要增加一种菜单风格或取消一种都很方便。
ExtJS5_自定义菜单1的更多相关文章
- ExtJS5_自定义菜单2
这一节来定义另外三种类型的菜单类.首先定义菜单按钮类.文件放于app/view/main/region目录下面,文件名为ButtonMainMenu.js. /** * 显示在顶部的按钮菜单,可以切换 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...
- 用c#开发微信(5)自定义菜单设置工具 (在线创建)
读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...
- 《C#微信开发系列(2)-自定义菜单管理》
2.0自定义菜单管理 ①接口说明 微信服务号聊天窗口下面的菜单项(有的公众号有启用有的则没有),这个可以在编辑模式简单配置,也可以在开发模式代码配置.微信公众平台开发者文档:微信公众号开发平台创建自定 ...
- 微信公众平台自定义菜单新增扫一扫、发图片、发位置 LBS运作更便捷
今天微信公众平台发布更新,自定义菜单新增扫一扫.发图片.发送位置等功能,这对于有意挖掘微信LBS服务的运营者来说更便捷了,订阅号不用返回微信界面就能扫图.发送图片.调用地理位置,用户体验更友好,自然也 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- 微信公众平台创建自定义菜单中文编码导致system error
创建包含了中文的自定义菜单时总是返回{"errcode":-1,"errmsg":"system error"},要将编码方式设置为UTF- ...
- 使用knockout-sortable实现对自定义菜单的拖拽排序
在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...
随机推荐
- getting start with storm 翻译 第八章 part-1
转载请注明出处:http://blog.csdn.net/lonelytrooper/article/details/12434915 第八章 事务性Topologies 在Storm中,正如本书前边 ...
- myeclipse 闪退解决方法
今天提交一个svn文件发生卡死,然后关闭myeclipse后发生,打开myeclipse出险闪退,摸索半天,发现: 只要修改下工作空间的名称,然后打开myeclipse重新导入即可,只是之前的配置都没 ...
- python列表操作总结
list是python中非常重要的类型/数据结构,总结如下: 符号说明 l:列表 l2:新列表 e:元素 index:位置 方法: 原地修改: l.append(e) l.insert(index, ...
- Angular过滤器 自定义及使用方法
首先设置自定义过滤器. 定义模块名:angular .module('myApp') .filter('filterName',function(){ return function(要过滤的对象,参 ...
- 慕课python3.5学习笔记
本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...
- setClickable(false)问题处理
在项目中遇到一个小问题 就是 设置btn的 点击不可以 setClickable(false) 结果发现还是有问题 查了半小时代码之后 才发现 是顺序问题 如果先设置点击监听setOnClickLi ...
- storyBoard方式ScrollView的AutoLayout
在使用storyboard和xib时,我们经常要用到ScrollView,还有自动 布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说 ...
- umlの用例图
我的总结是在看完uml学习之后又參考了同学借的<uml和ooad高速入门>的思路,利用齿轮带动的原理进行.废话不多说了.首先分析一下类图和用例图的联系与差别. 类图 用例图 类class ...
- Android中自定义View的MeasureSpec使用
有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/guide/topics/ui/custo ...
- MVC模式下的数据展示:EasyUI的datagrid
我的数据库设计是一张老师表teacher,一张学生表student,一个教师对应多个学生,在学生一方建立外键; 还有一点想清楚,需要展示的数据是根据什么来的,是成功登陆的用户的id?还是直接展示所有的 ...