最近学了下Extjs,感觉十分痛苦。特加是有些API不全,一个小问题弄半天弄不出来。今天遇到一个TabPanel的右键菜单的问题,本想做一个点右键关闭当前选项卡和其它的菜单,结果在TablePanel listerners一的事件里面写的如下代码。
Code
listeners:{
contextmenu:function(t,cur,e){
if(!this.cmenu){
this.cmenu=new Ext.menu.Menu({
items:[{
id:tab.id+'-close',
text:'Close',
handler:function(){
tab.remove(cur);
}
},{
text:'Close Other'
},{
text:'Close All'
}]
})
}
e.stopEvent();
this.cmenu.showAt(e.getPoint());
}
}
结果发现在怎么都不行,每次只能关闭一次,每二次就不行了。最后查了半天,在网上找了很久也没找到。郁闷之及。还是在它的API文档里面发现有类似的。看了它的代码后改造了下
Code
cmenu:false,
ctxItem:false,
listeners:{
contextmenu:function(t,cur,e){
if(!this.cmenu){
this.cmenu=new Ext.menu.Menu({
items:[{
id:tab.id+'-close',
text:'Close',
handler:function(){
tab.remove(tab.ctxItem);
}
},{
text:'Close Other'
},{
text:'Close All'
}]
})
}
e.stopEvent();
tab.ctxItem=cur;
this.cmenu.showAt(e.getPoint());
}
}
这下才行,我发现在TabPanel的contextmenu事件有点小猫腻,每二个参数说的是传的当前的tab结果在colse里面得不到。还是你每下次点击的那个tab,所以要设置一个全局的变量来保存。这里我用的是ctxItem。希望以后谁遇到这个问题能好些。