7、手把手教你Ext5(七)自定义菜单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之中引入‘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种类型的菜单,分别是:

  • 菜单按钮:在顶部的“菜单”按钮之下。
  • 菜单条:在顶部区域下面,刚做好的那个就是。
  • 菜单树:显示在左边区域的菜单树。
  • 折叠式菜单:显示在左边区域的另一种方式。

这几种菜单之间可以很方便的切换,如果认为太多了没必要,可以把不喜欢的取消掉。所有的界面都是用控件搭起来的,所以要增加一种菜单风格或取消一种都很方便。

时间: 2024-11-06 13:14:35

7、手把手教你Ext5(七)自定义菜单1的相关文章

手把手教你用ViewPager自定义实现Banner轮播

手把手教你用ViewPager自定义实现Banner轮播 欢迎大家关注Android开源网络框架NoHttp:https://github.com/Y0LANDA/NoHttp 我们在实际开发中,很多App都会在做一个广告轮播器(可能是图片,可能是其他View),很多同学都是使用别人封装好的或者直接使用ViewPager自己来改,但是有人可能并不理解里面的原理,或者有人遇到了手势滑动冲突.我们今天就用150行代码实现一自定义的广告轮播器并不干扰原来View滑动事件. 本例代码源码及Demo传送门

8、手把手教你Ext5(八)自定义菜单2

这一节来定义另外三种类型的菜单类.首先定义菜单按钮类.文件放于app/view/main/region目录下面,文件名为ButtonMainMenu.js. /** * 显示在顶部的按钮菜单,可以切换至标准菜单,菜单树 */ Ext.define('app.view.main.region.ButtonMainMenu', { extend: 'app.ux.ButtonTransparent', alias: 'widget.buttonmainmenu', viewModel: 'main'

9、手把手教你Ext5(九)使用MVVM特性控制菜单样式

菜单的样式多了,怎么可以灵活的切换是个问题. 在使用标准菜单的时候,在菜单最前面有二个按钮,可以切换到树状菜单和按钮菜单. 在树状菜单的显示区,可以切换换到标准菜单,以及折叠式菜单. 切换到按钮菜单之后: 切换菜单切换到标准菜单和树状菜单,需要在设置里面进行操作. 下面分别来看看是如何实现的.由于内部处理比较复杂,我就画一张大图了,源代码稍后也会发布在csdn中. 现在看看设置里面改变菜单样式的那个控件的运行图.

【微信公众平台】订阅号无需认证获取自定义菜单功能

你是一个订阅号的运营者么?你还在为自己的宣传没有自定义菜单烦恼么?你还在为了你的个人微信订阅号无法认证而没有自定义菜单功能而痛苦么?那么不要着急,现在小志哥教你免费获取自定义菜单功能,不论你是个人的订阅号还是企业的,不论你是认证的还是没有认证的(当然认证的是不需要我的帮忙的,哈哈)! 公众帐号运营者点击"添加功能插件"后选择右下角的"自定义菜单"卡片可申请开通自定义菜单插件. 编辑自定义菜单功能时可选择"跳转到网页"和"发送消息&quo

Android 自定义ViewGroup手把手教你实现ArcMenu

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37567907 逛eoe发现这样的UI效果,感觉很不错,后来知道github上有这么个开源项目~~~~当然本篇不是教你如何使用这个开源项目,而是教你如何自己通过自定义ViewGroup写这样的效果,自定义ViewGroup也是我的痛楚,嘿嘿,希望以此可以抛砖引玉~~ 效果图: 1.实现思路 通过效果图,会有几个问题: a.动画效果如何实现 可以看出动画是从顶点外外发射的,可能有人

手把手教会你微信公众平台自定义菜单开发——创建菜单

一如既往的,关于微信公众平台的开发,不算出自大牛的代码,但是简单易懂适合刚入门的朋友. 首先先介绍一下逻辑,因为发现很多朋友都不能看懂微信官方的文档,当然啦,这跟你是否认真看有关的,认真看总能看懂的,废话不说了.此时,我当你已经有一个已经申请到自定义菜单开发权限的微信服务号.首先,你要在后台开发模式下面找到你的AppId 还有 AppSecret并且记下来,然后通过这两个官方发放给你的ID去获取一个ACCESS_TOKEN[官方解释是:第三方访问api资源的票据],稍后会通过这个ACCESS_T

手把手教你搭建LyncServer2013之部署边缘服务器(七)

在前面的拓扑新建中我们已经加入了Lync边缘的单计算机池,今天我们就开始部署Lync边缘供外部用户访问了,首先来到Lync边缘这台服务器,安装服务器所需组件,命令如下: Add-WindowsFeature Web-Asp-Net45,Web-Mgmt-Tools,Windows-Identity-Foundation,Telnet-Client -source d:\sources\sxs -restart 在安装Lync边缘Lync组件之前,我们需要修改Lync边缘服务器的DNS后缀名称,如

Android 手把手教您自定义ViewGroup(一)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38339817 , 本文出自:[张鸿洋的博客] 最近由于工作的变动,导致的博客的更新计划有点被打乱,希望可以尽快脉动回来~ 今天给大家带来一篇自定义ViewGroup的教程,说白了,就是教大家如何自定义ViewGroup,如果你对自定义ViewGroup还不是很了解,或者正想学习如何自定义,那么你可以好好看看这篇博客. 1.概述 在写代码之前,我必须得问几个问题: 1.ViewG

手把手教你做关键词匹配项目(搜索引擎)---- 第七天

第七天 小帅帅拿回去仔细研究了一个晚上. 发现代码其实都是自己写的,就多了一些类,于老大还不是抄的我的代码,心里又鄙视了于老大一番. 其实每个人都有通病,写过程的总是会鄙视写面向对象的,因为他们没体会到面向对象是啥玩意,要让他们写好可得花上好几年的工夫. 小帅帅学编程的时候,明明知道有函数这一概念,知道函数的写法,但是实际上就算一个函数里面几百行代码,也不知道去提前多个函数出来,美其名约:你看我多厉害,几百行代码耶. 小帅帅心里虽然鄙视于老大,但是看到于老大的代码怎么感觉很清爽,一切都那么自然.