修改Extjs的findByType方法,弥补其不足

昨天我自己想在前台(用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);
	});	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章