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‘,

    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种类型的菜单。见下图:

时间: 2024-08-08 21:59:22

8、手把手教你Ext5(八)自定义菜单2的相关文章

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

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

7、手把手教你Ext5(七)自定义菜单1

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

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之安装反向代理服务器TMG(八)

首先修改反向代理服务器的DNS后缀为iSusan.cn 放入TMG安装光盘开始安装TMG 点击"运行准备工具"安装TMG所需组件 这里选择安装"Forefront TMG服务和管理" 勾选"启用Forefront TMG安装向导" 安装进程开始安装TMG核心组件 点击"添加"按钮添加内部网络适配器 点击"添加适配器" 选择"Lan"这块内部网卡 添加内部网卡会自动加入内部网络IP地址 下

微信公众平台开发(八) 自定义菜单功能开发

原文地址:http://www.cnblogs.com/mchina/p/3276878.html 一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自定义菜单接口将为公众账号的信息展示空间提供更多可能性.本文将针对自定义菜单做简单的开发应用,以供读者参考. 二.官方说明 开发者获取使用凭证后,可以使用该凭证对公众账号的自定义菜单进行创建.查询和删除

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

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