右键菜单
右键菜单
在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();
}
}]
}
}