extjs4.0 treepanel节点的选中、展开! 数据的重新加载! checked树

0 篇文章 0 订阅
1.extjs4.0API较3.0有非常大变化
2.多级子父节点的选中和展开。
3.数据的重新加载。tree.getStore().load
4.节点的移除,从树中根据ID获取节点 tree.getStore().getNodeById();
5.获取选中的节点,tree.getView().getChecked();
6.数据为异步加载,设置节点选中,tree.getStore().getNodeById('').set({checked:true});
<script type="text/javascript">
Ext.require([
             'Ext.tree.*',
             'Ext.data.*',
             'Ext.window.MessageBox',
             'Ext.tip.*'
         ]);
Ext.onReady(function() {
/*
 * 可以获取选中节点的ID,以及TEXT 
 *
*/
var checkedNodes = {
    _data:{},
	update:function(id,text,checked){
		if(checked){
			this.add(id,text,checked);
		}else if(!checked){
			this.delById(id);
		}
	},
    add: function(id,text){
       if(!this._data[id]){
			this._data[id] = {'id':id,'text':text};
		}
    },
	delById:function(id){
		if(this._data[id]){
			delete this._data[id];
		}			
	},
	getById:function(id){
		return this._data[id];
	},
	joinId:function(sep){
		arr = [];
		for(id in this._data){
			arr.push(id);
		}
		return arr.join(sep);
	},
	joinName:function(sep){
		arr = [];
		for(id in this._data){
			arr.push(this._data[id].text);
		}
		return arr.join(sep)
	},
	contains:function(id){
		return this_data[id];
	},
	init:function(ids,texts){
		if(ids.IndexOf(',') > 1){
			idarr = ids.split(',');
			textarr = texts.splist(',');
			for(var i=0; i<idarr.length; i++){
				if(idarr[i].replace(/^\s+|\s+$/g,'') != ''){
					this.add(idarr[i],textarr[i]);
				}
			}
		}
	}
};
	Ext.define('OrgInfo', {extend: 'Ext.data.Model',
        fields: [
            {name: 'id'},
            {name: 'text'},
            {name: 'name'}
        ]
	});
	var orgStore = Ext.create('Ext.data.TreeStore', {
		defaultRootId: "10",
		model: "OrgInfo",
		root: {id:10,text:'顺丰速运集团',leaf:false},
		proxy: {type:'ajax', actionMethods : "POST", url:'tree_data.jsp', reader:{type:'json'}},
		nodeParam:'id',
		textField : "name"
	});
	/*
	*设置子节点或者父节点选中的方法
	*设置单个节点选中的方法
	*/
	var TreeNodeCheck ={
		setNodeChecked:function(node,checked){
			checkedNodes.update(node.get('id'),node.get('text'),checked);
			node.set('checked',checked);
		},
		childChecked:function(node,checked){
			TreeNodeCheck.setNodeChecked(node,checked);
			node.expand();
			if(node.hasChildNodes()){
				 node.eachChild(function(child) {
					 TreeNodeCheck.childChecked(child,checked);
				 });
			}  
		},
		parentChecked:function(node,checked){
			   var parentNode = node.parentNode;
			   checked = parentNode == null ?null:checked;
			   TreeNodeCheck.setNodeChecked(node,checked); //设置父节点不选 中
			   if(parentNode !=null){ //如果父节点不为空则展开
				   var flag = false;
				   parentNode.eachChild(function(child) {
					   if(child.data.checked == true){
						   flag = true;
					   }            
				  });            
				  if(checked == false){
					   if(!flag){
						   	TreeNodeCheck.parentChecked(parentNode,checked);                
						   }            
				  }else{
						if(flag){
							TreeNodeCheck.parentChecked(parentNode,checked);            
				  		}            
				  }         
				}
			   
		}
	};
	   Ext.define("OrgTreePanel", {
	        extend: "Ext.tree.Panel", 
	        store : orgStore,
	        rootVisible: true,
	        useArrows: true,
	        frame: true,
	        title: 'Check Tree',
	        width: 200,
	        height: 250,
	        padding:'0 0 0 0',
	        selectIds:function(){
	        	 var records =this.getView().getChecked(),
                 ids = [];
	             Ext.Array.each(records, function(rec){
	                 ids.push(rec.get('id'));
	             });
	             return ids.join(",");
	        },
	        listeners:{            
	           	checkchange:function (node,checked,eOpts){
	           		TreeNodeCheck.childChecked(node,checked);              
	           		TreeNodeCheck.parentChecked(node,checked);
	           		
	           	},
	        	load:function( store,  records,  successful,  operation,  eOpts ){
	          		if(records.data.checked!=null){
	          			var hasChecked = false;
	              		Ext.Array.each(successful, function(rec){
	              			if(rec.data.checked){
	              				hasChecked = true;
	              				return false;
	              			}
	                   	});
	              		if(!records.data.checked){
	              			if(hasChecked){
	        	        			Ext.Array.each(successful, function(rec){
	        	        					 TreeNodeCheck.childChecked(rec,false);
	        		             	});
	              			}
	              		}else{
	              			if(!hasChecked){
	              				Ext.Array.each(successful, function(rec){
	              						 TreeNodeCheck.childChecked(rec,true);
	        		             	});
	              			}
	              		}
	          		}
	        	}
	        }
	    });
	 
	   var win = null;
	   var tree = null;
	   
	   Ext.create('Ext.Button', {
		    text: '得到被选中的节点',
		    renderTo: Ext.getBody(),
		    handler: function() {
		    	
		    	console.info(Ext.isEmpty(' '));
		    		console.info("checkedNodes.joinId:"+checkedNodes.joinId("-"));
		    	
		    	
		    }
	   });
	   
	   Ext.create('Ext.Button', {
		    text: 'delete tree',
		    renderTo: Ext.getBody(),
		    handler: function() {
		    	 tree.getRootNode().removeAll(false);
		    	 tree.getStore().load();
		    }
	   });
	   
	   win = Ext.create('Ext.window.Window', {
	   	    title: 'Hello',
	   	    height: 250,
	   	    width: 400,
	   	    layout: 'fit',
	   	 	closeAction :'hide',
	   	 	showWin:function(){
	   	 		this.show();
	   	 		tree.getRootNode().removeAll(false);
	 		  	tree.getStore().load({
        		    scope :this,
        		    callback: function(records, operation, success) {
        		       if(!tree.getRootNode().isExpanded()){
        		    	   tree.getRootNode().expand();
        		       }
        		    }
        		});
	   	 	},
	   		initComponent: function () {//构造函数
	            var me = this;
	            tree = Ext.create("OrgTreePanel");
	            me.items = [tree];
	            me.superclass.initComponent.call(me);
	        },
	        listeners: {
	        	beforehide:function(win, eOpts ){
	        	 
	        	}
	        }
	   });
	   
	   Ext.create('Ext.Button', {
		    text: 'Click me',
		    renderTo: Ext.getBody(),
		    handler: function() {
		    	 win.showWin();
		    }
	  });
});
</script>

extjs4.0 treepanel节点的选中、展开! 数据的重新加载
1.extjs4.0API较3.0有非常大变化
2.多级子父节点的选中和展开。
3.数据的重新加载。tree.getStore().load
4.节点的移除,从树中根据ID获取节点 tree.getStore().getNodeById();
5.获取选中的节点,tree.getView().getChecked();
6.数据为异步加载,设置节点选中,tree.getStore().getNodeById('').set({checked:true});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值