1. 程式人生 > >Extjs樹的各種玩法案例

Extjs樹的各種玩法案例

本案例中記載了Extjs中一棵樹的形成以及各種案例整合,並詳解介紹了TreePanel、TreeNode和AsyncTreeNode這三個主要物件。純屬個人業餘時間玩玩的,整理出來,方便以後檢視。

JSP頁面:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
	<title>區域管理</title>
	
	<link rel="stylesheet" type="text/css" href="${ctxStatic}/ext-3.4.0/resources/css/ext-all.css" />
	<link rel="stylesheet" type="text/css" href="${ctxStatic}/ext-3.4.0/ux/treegrid/treegrid.css" />

	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/adapter/ext/ext-base.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ext-all.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGridSorter.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGridColumnResizer.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGridNodeUI.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGridLoader.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGridColumns.js"></script>
	<script type="text/javascript" src="${ctxStatic}/ext-3.4.0/ux/treegrid/TreeGrid.js"></script>
	
	<script type="text/javascript" src="${ctxStatic}/jquery/jquery-1.9.1.min.js"></script>
	<script type="text/javascript" src="${ctxStatic}/js/srcs/srcs-treegrid.js"></script>
	<script type="text/javascript">
		//專案根目錄地址
		var ctxStatic = '${ctxStatic}';
	</script>
</head>
<body>
	<div id="container"></div>
</body>
</html>

js頁面:

Ext.onReady(function() {
	// 初始化節點提示qtip
	Ext.QuickTips.init();
	// 定義一個根節點
	var root = new Ext.tree.TreeNode({
		id : 'root',
		text : '樹根',
		checked : true,
		qtip : '我是樹根'
	});
	// 定義一個樹葉或者枝
	var leaf1 = new Ext.tree.TreeNode({
		id : "leaf1",
		text : '我是樹葉1',
		checked : true,
		qtip : '我是樹葉'
	});
	var leaf2 = new Ext.tree.TreeNode({
		id : "leaf2",
		text : '我是樹枝2',
		checked : true,
		qtip : '我是樹枝'
	});
	var leaf3 = new Ext.tree.TreeNode({
		id : "leaf3",
		text : '我是樹葉3',
		href : 'http://www.baidu.com',
		checked : true,
		qtip : '我是樹葉'
	});
	var leaf4 = new Ext.tree.TreeNode({
		id : "leaf4",
		text : '我是樹枝4',
		checked : true,
		qtip : '我是樹枝'
	});
	var leaf5 = new Ext.tree.TreeNode({
		id : "leaf5",
		text : '我是樹葉5',
		checked : true,
		qtip : '我是樹葉'
	});
	var leaf6 = new Ext.tree.TreeNode({
		id : "leaf6",
		text : '我是樹葉4',
		checked : true,
		qtip : '我是樹葉'
	});
	root.appendChild(leaf1);
	root.appendChild(leaf2);
	leaf2.appendChild(leaf3);
	leaf2.appendChild(leaf4);
	leaf4.appendChild(leaf5);
	leaf4.appendChild(leaf6);


	// 定義一個選單
	// var contextMenu = new Ext.menu.Menu({ items : [(
	// ),( )] }); contextMenu.showAt(event.getXY());
	// tree.on('contextmenu',treeContextHandler);
	//	 
	//	
	// var root = new Ext.tree.AsyncTreeNode({ text:'i am a root', id:'root',
	// children:[{ text:'node1',leaf:true },{ text:'node2',leaf:true },{
	// text:'node3',leaf:true }] }); var loader = new Ext.tree.TreeLoader();


	// 定義一棵樹
	var tree = new Ext.tree.TreePanel({
		renderTo : 'container',
		// loader : loader,
		root : root,
		title : '我是一顆小小樹',// 樹標題
		collapsible : true,// 樹形是否有縮放功能
		autoHeight : true,// 自動高度,預設false
		animate : true,// 展開動畫
		enableDrag : true,// 是否可以拖動(效果上)
		enableDD : true,// 不進可以拖動,還可以改變節點層次結構
		enableDrop : false,// 僅僅drop
		lines : true,// 節點間的虛線條是否顯示
		rootVisible : true,// 是否顯示根節點,預設true
		userArrows : true,// 是否顯示小箭頭
		// autoScroll : true,//是否顯示滾動條
		// height : 150,
		width : 200


	});
	// 第一個引數為true,展開所有節點,false只展開一級。第二個引數為true,慢慢展開,顯示展開,false,則不顯示過程
	root.expand(false, true);
	// 編寫樹節點的單擊事件
	tree.on('click', function(node, event) {
		// Ext.Msg.alert("資訊提示","you clicked me!");
		Ext.Msg.show({
			title : '資訊提示',
			msg : node.text,
			animEl : node.ui.textNode
		});
		// 為節點修改樣式
		var ui = node.ui;
		ui.hide();
		(function() {
			ui.show();
		}).defer(2000);
		// ui.addClass("big");
		// (
		// function(){
		// ui.removeClass("big");
		// }
		// ).defer(5000);
		// 刪除選中的節點
		// tree.getSelectionModel().getSelectedNode().remove();
	});
	// 編寫樹節點的雙擊事件
	tree.on('dblclick', function(node, event) {
		Ext.Msg.alert("資訊提示", "you clicked me twice!");
	});
	// 編輯樹節點的拖放事件
	tree.on('nodedrop', function(event) {
		Ext.Msg.alert('資訊提示', '節點' + event.dropNode.text + '掉到了'
				+ event.target.text + '上,掉落的方式是' + event.point);
		switch (event.point) {
		case 'append':
			Ext.Msg.alert('資訊提示', '節點' + event.dropNode.text + '變成了'
					+ event.target.text + '子節點');
			break;
		case 'above':
			Ext.Msg.alert('資訊提示', '節點' + event.dropNode.text + '掉到了'
					+ event.target.text + '和'
					+ event.target.previousSibling.text + '之間');
			break;
		case 'below':
			Ext.Msg.alert('資訊提示', '節點' + event.dropNode.text + '掉到了'
					+ event.dropNode.previousSibling.text + '和'
					+ event.target.nextSibling.text + '之間');
			break;
		}
	})


	// 對樹節點進行排序的工具
	// new Ext.tree.TreeSorter(tree,{folderSort:true,dir:desc,property:'text'});


	// //編寫樹節點的雙擊事件 tree.on('expandnode',function(node,event){
	// Ext.Msg.alert("資訊提示","expandnode!"); }); //編寫樹節點的雙擊事件
	// tree.on('collapsenode',function(node,event){
	// Ext.Msg.alert("資訊提示","collapsenode!"); });


	var root2 = new Ext.tree.TreeNode({
		id : 'root2',
		text : '樹根2',
		qtip : '我是樹根2'
	});
	var tree2 = new Ext.tree.TreePanel({
		renderTo : 'container',
		root : root2,
		enableDrop : true,
		// enableDrag:true,
		title : '我是一顆小小草',
		collapsible : true,
		width : 200
	});
	root2.expand();


});


一、Ext.tree.TreePanel

      主要配置項:
            root:樹的根節點。
            rootVisible:是否顯示根節點,預設為true。
            useArrows:是否在樹中使用Vista樣式箭頭,預設為false。
            lines:是否顯示樹線,預設為true。
            loader:樹節點的載入器,預設為Ext.tree.TreeLoader。
            selModel:樹的選擇模式,預設為Ext.tree.DefaultSelectionModel。
            pathSeparator:樹節點路徑的分隔符,預設為“/”。
            singleExpand:是否一次只展開樹中的一個節點,預設為true。
            requestMethod:請求方法,可選值有POST、GET。
            containerScroll:是否將樹形面板註冊到滾動管理器ScrollManager中。

      主要方法:
            collapseAll():收縮所有樹節點
            expandAll():展開所有樹節點
            getRootNode():獲取根節點
            getNodeById(String id):獲取指定id的節點
            expand( [Boolean deep], [Boolean anim], [Function callback], [Object scope] )展開panel的body以便讓其變得可見
            expandPath( String path, [String attr], [Function callback] )展開當前TreePanel中的指定路徑
            getChecked( [String attribute], [TreeNode startNode] )獲得選中的節點列表,或者被選中節點的某個指定的屬性陣列
            selectPath( String path, [String attr], [Function callback] ) 從樹中選中所給路徑的節點
            getSelectionModel():返回此TreePanel使用的選擇模型

 二、Ext.tree.TreeNode
      主要配置項:
            text:節點上的文字資訊
            qtip:節點上的提示資訊
            icon:節點圖示對應的路徑
            iconCls:應用到節點圖示上的樣式
            checked:當前節點的選擇狀態
                  true:在節點前顯示一個選中狀態的複選框
                  false:在節點前顯示一個未選中狀態的複選框
                  不指定該值:不顯示任何複選框
            href:節點的連線屬性,預設為#
            hrefTarget:顯示節點連線的目標框架
            editable:是否允許編輯,預設為true
            expanded:是否展開節點,預設為false
            disabled:是否禁用節點,預設為false
            singleClickExpand:是否通過單擊方式展開節點
            allowChildren:是否允許當前節點具有子節點,預設為true
            expandable:當不含子節點時,是否總顯示一個加減圖示,預設為false
            uiProvider:節點的UI類,預設為Ext.tree.TreeNodeUI
 
      主要屬性:
            text:節點上的文字資訊
            disabled:當前節點是否被禁用
  
      主要方法:
            collapse( [Boolean deep], [Boolean anim], [Function callback], [Object scope] ):收縮當前節點
            deep:是否級聯收縮全部子節點
            collapseChildNodes( [Boolean deep] ):收縮所有子節點
            disable():禁用當前節點
            enable():啟用當前節點
            ensureVisible( [Function callback], [Object scope] ):確保所有父節點都是展開的
            expand( [Boolean deep], [Boolean anim], [Function callback], [Object scope] ):展開當前節點
            expandChildNodes( [Boolean deep] ):展開所有子節點
            isExpanded():當前節點是否展開
            isSelected():當前節點是否被選中
            select():選擇當前節點
            setText( String text ):設定當前的文字
            toggle():切換當前節點的展開和收縮狀態
            unselect():取消對當前節點的選擇
            getUI():取得節點的UI物件 

 三、Ext.tree.AsyncTreeNode
      主要配置項:
            loader:當前節點的樹載入器,預設使用樹中配置的樹載入器
  
      主要方法:
            isLoaded():當前節點是否已經載入資料
            reload( Function callback, [Object scope] ):重新載入節點資料,並呼叫回撥函式 


作者:佇望碧落 出處:http://blog.csdn.net/cl05300629