右键菜单

右键菜单

在grid表格中,经常用到右键菜单,一般的右键菜单如下,但是存在问题,每次创建右键时,都会创建一个新的右键菜单实例,虽然没有啥大的问题(存在对象泄漏),本着负责的态度,在隐藏的时候,主动删除这个对象:

另外一种常见的处理方式是,像之前其他的一样,在主grid表格创建时,手动创建一个实例,每次右键的时候,调用这个实例的show方法。就不存在泄漏。但在grid表格销毁的时候,所有手动create的组件都要手动销毁。

//右键菜单
"rowcontextmenu":function ( c, record, tr, rowIndex, e, eOpts ){
    var me = this;
    var v=me.getViewModel().getData();
    //增加右键菜单可用情况判断
    Ext.create('Ext.menu.Menu', {
        bodyStyle:"padding:5px;",
        items: [{
            text: '编辑护士',
            iconCls:'edit',
            disabled:v['selections']!=1,
            handler:function(btn){
                me.addNurseWin.animateTarget = btn;
                me.addNurseWin.actionType=2;
                me.addNurseWin.show();
            }
        },{
            text: '删除护士',
            iconCls:'delete',
            disabled:v['selections']==0,
            handler:function(){
                me.confirmDelete();
            }
        }],
        //下面的代码,hide时主动删除此菜单。
        listeners:{
            'destroy':function( cmp, eOpts) {
                console.log('我销毁啦');
            },
            hide:function ( cmp, eOpts ){
                console.log('我隐藏啦');
                this.destroy();
            }
        }
    }).showAt(e.getXY());
    e.preventDefault();
}

tbar中用到的菜单实例

代码如下,重点关注,button中menu的写法结构。(button有menu这个属性)。

{
    text:'护理菜单',
    iconCls:"grade",
    menu:{
        defaults: {
            iconCls:'icon-book'
        },
        items:[{
            text:'护理文书',
            handler:function(btn){
                var menu=btn.up('button');
                var win=Ext.widget({
                    xtype:'window',
                    title:'护理文书',
                    layout:'fit',
                    width:650,
                    height:500,
                    modal:true,
                    resizable:false,
                    animateTarget:menu,
                    items:[{
                        xtype:'descriptiongrid',
                        width:'100%',
                    }]
                });
                win.show();
            }
        },{
            text:'护理等级',
            handler:function(btn){
                var menu=btn.up('button');
                var win=Ext.widget({
                    xtype:'window',
                    title:'护理等级',
                    layout:'fit',
                    width:650,
                    height:500,
                    modal:true,
                    resizable:false,
                    animateTarget:menu,
                    items:[{
                        xtype:'nursinggradegrid',
                        width:'100%',
                    }]
                });
                win.show();
            }
        }]
    }
}