梅花雪树控件的属性及方法
【背景】
郵件地址簿選擇樹,使用梅花雪樹控件實現,但是沒有實現自動展開到當前用戶所在部門,嘗試很多種方式都無果,今天無意間發現梅花雪樹的屬性和方法介紹,故進行收藏。
梅花雪樹1.0控件 有以下屬性和方法。
屬性
MzTreeView 類的一些屬性: 屬性名 類型 屬性的具體說明
MzTreeView.nodes 集合 服務器端給樹指定數據源時數據存放的對象,具體存放格式如:
MzTreeViewHandle.nodes["parentId_nodeId"] = "text: nodeText; icon: nodeIcon; url: nodeURL; ...";
?
MzTreeView.url 地址字符串 可讀寫,樹缺省的URL,默認值是 #
MzTreeView.target 目標框架名 可讀寫,樹缺省的鏈接target,默認值是 _self
MzTreeView.name 字符 只讀,樹的實例名,同樹實例化時作為參數傳入(大小寫敏感):
var Tree = new MzTreeView("Tree");
MzTreeView.currentNode 樹節點 只讀,樹當前得到焦點的節點對象
MzTreeView.icons 集合 樹所使用的所有圖標存放
MzTreeView.iconsExpand 集合 樹里展開狀態的圖標存放
MzTreeView.colors 集合 樹里使用到的幾個顏色存放
MzTreeView 在客戶端的節點所擁有的屬性: 屬性名 屬性的具體說明
node.id 數字文本,節點的ID
node.parentId 數字文本,節點對應的父節點ID
node.text 文本,節點的顯示文本
node.hint 文本,節點的注釋說明
node.icon 文本,節點對應的圖標
node.path 文本,節點在樹里的絕對路徑:0_1_10_34
node.url 文本,該節點的 URL
node.target 文本,該節點鏈接的目標框架名
node.data 文本,該節點所掛載的數據
node.method 文本,該節點的點擊對應處理語句
node.parentNode 對象,節點的父節點對象
node.childNodes 數組,包含節點下所有子節點的數組
node.sourceIndex 文本,服務器給予的數據里對象的 parentId_nodeId 的組合字符串
node.hasChild 布爾值,指該節點是否有子節點
node.isLoad 布爾值,本節點的子節點數據是否已經在客戶端初始化
node.isExpand 布爾值,節點的展開狀態
方法
MzTreeView 類的一些方法: 方法名 方法的具體說明
MzTreeView.toString() 類的默認初始運行
MzTreeView.buildNode(id) 將該節點的所有下級子節點轉換成 HTML 并在網頁上體現出來
MzTreeView.nodeToHTML(node, AtEnd) 將 node 轉換成 HTML
MzTreeView.load(id) 從數據源里加載當前節點下的所有子節點
MzTreeView.nodeInit(sourceIndex, parentId) 節點的信息初始,從數據源到客戶端完整節點的轉化
MzTreeView.focus(id) 聚集到某個節點上
MzTreeView.expand(id[, sureExpand]) 展開節點(包含下級子節點數據的加載初始化)
MzTreeView.setIconPath(path) 給節點圖片設置正確的路徑
MzTreeView.nodeClick(id) 節點鏈接點擊時同時被觸發的點擊事件處理方法
MzTreeView.upperNode() 跳轉到當前聚集節點的父級節點
MzTreeView.lowerNode() 跳轉到當前聚集節點的子級節點
MzTreeView.pervNode() 跳轉到當前聚集節點的上一節點
MzTreeView.nextNode() 跳轉到當前聚集節點的下一節點
MzTreeView.expandAll() 展開所有的樹點,在總節點量大于500時這步操作將會比較耗時
//下面是用AJAX來實現的,這里是一次性加載所有數據,沒有實現異步加載。
var tree = new MzTreeView("tree");//創建一個樹的實例
function TheTree()
...{
? tree.icons["proj"] = "project.gif";
? tree.icons["book"]? = "book.gif";
? tree.iconsExpand["book"] = "bookopen.gif"; //設置圖片
? tree.setIconPath("image/");
?
? tree.nodes["0_1"] = "text:項目列表";//虛擬根目錄
?
? var DataSet = FinetWebCPM.TreeTest.GetProject().val;
?
? var rows = DataSet.Tables[0].Rows;
? for(i = 0 ;i < rows.length ; i++)
? ...{
?tree.nodes["1_"+rows[i].ProjID] = "text:"+rows[i].SCName;//nodes數組的下表的格式是[父節點id_子節點id]
?var DataSetPPage = FinetWebCPM.TreeTest.GetPage(rows[i].ProjID).val;
?if(DataSetPPage != null)
?...{
? var rowspage = DataSetPPage.Tables[0].Rows;
? if(rowspage.length > 0)
? ...{
?? for(n = 0 ;n < rowspage.length ; n++)
?? ...{
??? tree.nodes[rows[i].ProjID+"_"+rowspage[n].PageID] = "text:"+rowspage[n].PageTitle+";url:"+rowspage[n].PageUrl;
?? }
? }
? else
? ...{
?? tree.nodes[rows[i].ProjID+"_None"] = "text:無此項目頁面!";
? }
?}
?else
?...{
? tree.nodes[rows[i].ProjID+"_None"] = "text:無此項目頁面!";
?}
? }
? document.getElementById("treeviewarea").innerHTML = tree.toString();
}
?
?
下面是梅花雪樹空間2.0的例子。?
2.0的功能有了很大的改進,加入了動態加載,可以使用xml,js,一個數組等來作為數據源,在節點中還加入了checkbox。
下面看看用xml,和js來作為數據源的。
myxml.xml
<?xml version="1.0" encoding="utf-8"?>
<nodes>
??? <node id="100" url="/page/100.htm" text="100頁面" />
??? <node id="101" url='/page/101.htm' text="101頁面">
??????? <node text="child node" />
??? </node>
??? <node id="102" url='/page/102.htm' text="102頁面" />
??? <node id="103" url='/page/103.htm' text="103頁面" />
</nodes>
help.js
var data=...{};
data['3_301'] = 'text:ASP ; data:roomid=301';
data['3_35409'] = 'text:JSP ; data:roomid=5409';
data['3_303'] = 'text:PHP ; data:roomid=303';
js部分
?? <SCRIPT LANG GE="JavaScript">
??????? var data=...{};
??????? data["-1_1"] = "text: 起點;";//nodes的下標和1.0的格式是一樣的。
??????? data['1_9001'] = 'text: 首頁;';
??????? data['1_9002'] = 'text: 介紹; XMLData: data/myxml.xml ';
??????? data['1_9009'] = 'text: 幫助; url:page/help?typenum=1&roomid=1 ; JSData: data/help.js ';//可以設置url的彈出方式target:_blank;,其默認是_self。
var xmlstr='<nodes>'+
??????? '<node text="中國" />'+
??????? '<node text="江西" />'+
??????? '<node text="廣東">'+
??????????? '<node text="梅州" />'+
??????????? '<node text="深圳" />'+
??????? '</node>'+
??????? '<node text="河北" />'+
????? '</nodes>';
??????? Using("System.Web.UI.WebControls.MzTreeView");
??????? var tree = new MzTreeView();
??????? tree.dataSource = data
??????? tree.loadXmlDataString(xmlstr, 1);//xml字符串作為數據源,loadXmlDataString方法的第一個參數是xml字符串,第二個參數父節點ID
??????? tree.setJsDataPath("data/");//設置數據源的位置
??????? tree.setXmlDataPath("data/");
??????? tree.autoSort=false;
??????? tree.useCheckbox=tr;//是否使用checkbox
??????? tree.canOperate=tr;
??????? document.write(a.render());//輸出樹
??????? tree.expandLevel(1);//展開1節點
?</SCRIPT>
?
梅花雪樹的url默認是#,如果你的樹很高,你單擊下面節點的時候會跳到頁面的頂層,你可以將url寫成url:javascript:return;這樣來屏蔽掉默認的url,不過你設置成 這樣還將target屬性是指成_blank的話,將會彈出一個新的窗口。
也許你要修改這些默認設置的話,你可以修改\scripts\system\web\ui\webcontrols\mztreeview.js里面的代碼。如果你會英語及JS的話,應該是很簡單的。
梅花雪樹控件只有雙擊,和單擊事件,下面來為樹控件加各右鍵菜單事件,打開\scripts\system\web\ui\webcontrols\mztreeview.js,文件,找到render事件,這方法改成
MzTreeView.prototype.render = function()
...{
? function loadImg(C)...{for(var i in C)...{if("string"==typeof C[i])...{
? var a=new Image(); a.src=me.iconPath + C[i]; C[i]=a;}}} var me=this;
? loadImg(MzTreeView.icons.expand);loadImg(MzTreeView.icons.collapse);
? loadImg(MzTreeView.icons.line); me.firstNode=null;
? loadCssFile(this.iconPath +"mztreeview.css", "MzTreeView_CSS");
? this.initialize(); var str="no data", i, root=this.rootNode;
? if (root.hasChild)...{var a = [], c = root.childNodes; me.firstNode=c[0];
? for(i=0;i<c.length;i++)a[i]=c[i].render(i==c.length-1);str=a.join("");}
? setTimeout(function()...{me.afterRender();}, 10);
? return "<div class='mztreeview' id='MTV_root_"+ this.index +"' "+
??? "οnclick='Instance(""+ this.index +"").clickHandle(event)' "+
??? "οndblclick='Instance(""+ this.index +"").dblClickHandle(event)' "+
??? "οncοntextmenu='Instance(""+ this.index +"").contextMenuHandle(event)' "+//這里是我們添加的右鍵事件
??? ">"+ str +"</div>";
};
?
然后我們還得多寫個方法。
//private: contextMenuHandle
MzTreeView.prototype.contextMenuHandle = function(e)
...{
? e = window.event || e; e = e.srcElement || e.target;
? if((e.tagName=="A" || e.tagName=="IMG")&& e.id)
? ...{
??? e=this.nodes[e.id.s str(e.id.lastIndexOf("_") +1)];
??? //e是一個節點對象,如我這里是判斷這個節點是否有子節點,然后執行相應的方法 e.hasChild ? Tool(e,"project"):Tool(e,"page");
??? e.focus();
??? this.currentNode=e;this.dispatchEvent(new System.Event("oncontextmenu"));
? }
};
總結
以上是生活随笔為你收集整理的梅花雪树控件的属性及方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小菜鸟初次接触JBoss应用服务器
- 下一篇: MXF crcf