zoukankan      html  css  js  c++  java
  • 8、手把手教你Extjs5(八)自定义菜单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种类型的菜单。见下图:

    zfdvw35a

  • 相关阅读:
    Python学习 之 文件
    Python学习 之 对内存的使用(浅拷贝和深拷贝)
    Python学习 之 爬虫
    Python学习 之 正则表达式
    为何现在的网页广告都是有关你搜索或者购买过的商品 2015-08-22 22:06 1534人阅读 评论(35) 收藏
    Junit使用注意点
    用递归方式在JSON中查找对象
    利用StringBuffer来替换内容
    使用ant时 出现 java.lang.OutOfMemoryErro r: Java heap space的解决办法
    python-re使用举例
  • 原文地址:https://www.cnblogs.com/niejunchan/p/4996903.html
Copyright © 2011-2022 走看看