由 于公司要求做一棵關(guān)于公司員工選擇的JS控件樹,以前我們一直使用的都是dTree,由于沒有采用AJAX,服務(wù)器在北京的話,使用起來超慢,于是上面要 求修改此樹,沒想到任務(wù)落到了我的頭上,沒辦法,硬著頭皮做吧。正在我想有什么辦法的時(shí)候,同事推介用用Xtree,于是我開始去學(xué)習(xí)這個(gè)東東,現(xiàn)在只能 是基本應(yīng)用,也想共享一下自己的學(xué)習(xí)必得。
1、下載:http://webfx.eae.net/dhtml/xtree2b/,里面包括了API,和DEMO,都是E文的,不過很容易看懂的。也可以直接在此網(wǎng)站點(diǎn)擊相關(guān)DEMO看效果,很不錯(cuò)的。
2、就是使用了:可以直接打開下載解壓后的文件中的相關(guān)DEMO看看效果。不過要注意,因?yàn)閄tree使用了AJAX,也使用到了XML,不知道什 么原因,在 IE里本地打開動(dòng)態(tài)加載的樹時(shí)會(huì)報(bào)JS錯(cuò)誤,也不能正常打開樹(通過服務(wù)器器不會(huì)出錯(cuò)),在FireFox中就能本地正常打開。
3、建立自己的樹:Xtree有兩種樹,一種是靜態(tài)樹,一種是動(dòng)態(tài)樹。也可以將這兩種樹綜合在一起使用。
大家要去參考一下網(wǎng)上的“分析xloadtree, 用ajax實(shí)現(xiàn)的動(dòng)態(tài)目錄樹 ”這篇文章,寫得不錯(cuò)。
(1)、靜態(tài)樹:
<html>
<head>
<title>測(cè)試樹</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="css/xtree2.css">
<script type="text/javascript" src="js/xtree2.js"></script>
</head>
<body>
<script type="text/javascript">
var tree = new WebFXTree("測(cè)試樹");//構(gòu)造一棵樹
for (var i = 0; i < 50; i++){
tree.add( new WebFXTreeItem("子結(jié)點(diǎn) " + i) );//加入結(jié)點(diǎn)
}
tree.write();//輸入樹
</script>
<body>
</html>
(2)、動(dòng)態(tài)樹
var tree = new WebFXLoadTree("Hello World", "tree.xml");//打開根結(jié)點(diǎn)時(shí),即從tree.xml文件中得到子樹,也可是從服務(wù)器返回的XML流
tree.write();
(3)、兩種樹綜合(從XML文件中讀到子樹結(jié)點(diǎn)):
var tree = new WebFXTree("Root");
tree.add(new WebFXTreeItem("Tree Item 1"));
//從tree.xml文件中動(dòng)態(tài)加載子樹,此處的XML文件可以是從服務(wù)器方返回來的XML流,
//如:tree.add(new WebFXLoadTreeItem("從服務(wù)器返回", "tree.jsp"));
tree.add(new WebFXLoadTreeItem("Tree Item 2", "tree.xml"));
tree.add(new WebFXTreeItem("Tree Item 4"));
tree.write();
tree.jsp文件如下:
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8" %>
<%
response.setContentType("text/xml"); //這句必須要,只有設(shè)置了才是能XML流形式輸出到客戶端
out.println("<tree>");
out.println("<tree text=""Load tree.xml"" src=""
out.println("</tree>");
%>
4、tree.xml說明:
在動(dòng)態(tài)生成一棵樹時(shí)就會(huì)用到tree.xml文件,它是一個(gè)標(biāo)準(zhǔn)的XML文件。
它由一個(gè)外層的tree無屬性元素,再內(nèi)部包括多個(gè)子tree元素組成。
使用要注意的是:
如果要使用到中文或漢字的話,最好在文件開始處加入<?xml version="1.0" encoding="gb2312"?>否則會(huì)報(bào)亂碼的JS錯(cuò)誤。
另外就是XML文件中的特殊字符處理,這是使用這個(gè)很傷腦殼的地方,大家可以查考xtree所附帶的TREE.XML文件,講得很清楚。
<?xml version="1.0" encoding="gb2312"?>
<tree>
<tree text="Load "tree1.xml" (Should raise error)" src="tree1.xml" toolTip="Tool Tip"/>
<tree text="Load "tree2.xml" (Should raise error)" src="tree2.xml"
onerror="this.setText('Load "tree2.xml" (Raised error)')"/>
<tree text="Loaded Item 1" action="
<tree text="Loaded Item 2" expanded="true">
<tree text="Loaded Item 2.1" action="javascript:alert( tree.getSelected().getId() )" id="custom-id"/>
</tree>
<tree text="Loaded Item 3 (click to set src)" onaction="this.setSrc(this.getSrc() ? null : 'tree3.xml')"
onload="this.setText('Loaded Item 3 (changed onload)')"/>
<tree text="Load treeLARGE.xml" src="treeLARGE.xml" toolTip="XML file with 500 items"/>
<tree text="Deep nesting" src="nest.xml.pl" />
</tree>
其實(shí)xtree還提供了兩個(gè)JS文件:xtree2.js,xloadtree2.js,里面包括了xtree的工作原理和相關(guān)方法及屬性,
沒事大家可以去看看,對(duì)操作樹很有用處的,如:選擇/得到指定結(jié)點(diǎn)的信息,得到/修改結(jié)點(diǎn)的圖標(biāo)等等。
我在使用時(shí)由于TOMCAT設(shè)置成不允許客戶端緩存,感覺樹大了就有點(diǎn)點(diǎn)慢,所以建議大家使用時(shí)允許客戶端緩存,會(huì)快很多。