昨天我自己想在前台(用Extjs)做按钮权限控制,前台按钮权限控制本身安全性不好,这个暂不讨论。
Ext.Container 的 findByType 方法并不能获取容器下级的所有的任意类型的控件,比如获取按钮,它不能获取 panel 的 toolbar 里面的按钮,所以我想自己做一个findByType方法。
获取容器下的所有按钮的方法如下,获取容器下的其他控件可以通过类似的方法实现。
//命名空间 及全局变量定义
Ext.ns("TT.util");
Ext.ns("TT.data");
TT.data.btnArray = null;
//获取当前容器下所有按钮
TT.util.findBtnBase = function( c ){
var array = [];
if( c.toolbars ){
Ext.each(c.toolbars, function(i){
var j = i.items.items;
Ext.each(j,function(k){
if( k.xtype=='button' || k.type=='button'){
array.push(k);
}
})
});
}
if( c.items && c.items.items ){
var i = c.items.items;
Ext.each(i,function(j){
if(j.xtype=='button' || j.type=='button'){
array.push(j);
}
});
}
return array;
}
//获取当前容器,以及下级所有容器的所有按钮(递归)
TT.util.findBtn = function( c ){
//如果c不是叶子节点
if( (c.items && c.items.items) || (c.toolbars) ){
var btnArray = TT.util.findBtnBase(c);
TT.util.pushArray(btnArray, TT.data.btnArray);
if(c.items && c.items.items){
Ext.each( c.items.items, function(i){
TT.util.findBtn(i);
});
}
}
}
//将 src 数组的内容拷入 dest 数组
TT.util.pushArray = function(src,dest){
Ext.each(src,function(i){
dest.push(i);
});
}