修改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);
	});	
}


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