利用Ext Js生成動(dòng)態(tài)樹實(shí)例代碼
更新時(shí)間:2008年09月08日 21:41:28 作者:
今天在公司幫同事寫了個(gè)用Ext Js生成動(dòng)態(tài)樹的Demo,在這里分享一下,也好供以后自己查閱。
一. 需求
要求生成一顆部門樹,初始只列出根部門
當(dāng)點(diǎn)擊一個(gè)部門節(jié)點(diǎn)時(shí),動(dòng)態(tài)載入該部門下的直屬子部門,并展開該部門節(jié)點(diǎn)
部門節(jié)點(diǎn)要求支持右鍵單擊事件,當(dāng)點(diǎn)擊右鍵時(shí),列出相關(guān)操作菜單
二. 關(guān)鍵類
這里主要涉及Ext JS的兩個(gè)類:
Ext.tree.TreeNode
Ext.menu.Menu
相關(guān)API可以參考:http://extjs.com/deploy/ext/docs/
三. 代碼示例
1. 先看一下測試頁面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Reorder TreePanel</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../ext-all.js"></script>
<script type="text/javascript" src="reorder.js"></script>
<!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="../shared/examples.css" />
<link rel="stylesheet" type="text/css" href="../shared/lib.css" />
<script type="text/javascript">
/**************
onload事件
***************/
window.onload=function(){
createTree(3);
}
</script>
</head>
<body>
<script type="text/javascript" src="../shared/examples.js"></script>
<h1>現(xiàn)在要生成一顆動(dòng)態(tài)樹</h1>
<div id="container">
</div>
</body>
</html>
2. 再看一下生成樹的函數(shù)
/***********************************
創(chuàng)建樹
by chb
************************************/
function createTree(n){
Ext.QuickTips.init();
var mytree=new Ext.tree.TreePanel({
el:"container",
animate:true,
title:"Extjs動(dòng)態(tài)樹",
collapsible:true,
enableDD:true,
enableDrag:true,
rootVisible:true,
autoScroll:true,
autoHeight:true,
width:"30%",
lines:true
});
//根節(jié)點(diǎn)
var root=new Ext.tree.TreeNode({
id:"root",
text:"集團(tuán)公司",
expanded:true
});
for(var i=0;i<n;i++){
var sub1=new Ext.tree.TreeNode({
id:i+1,
text:"子公司"+(i+1),
singleClickExpand:true,
listeners:{
//監(jiān)聽單擊事件
"click":function(node){
myExpand(node);
},
//監(jiān)聽右鍵
"contextmenu":function(node,e){
//列出右鍵菜單
menu=new Ext.menu.Menu([
{
text:"打開當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
myExpand(node);
}
},
{
text:"編輯當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
alert(node.id);
}
},
{
text:"刪除當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
alert(node.id);
}
}]);
//顯示在當(dāng)前位置
menu.showAt(e.getPoint());
}
}
});
root.appendChild(sub1);
}
mytree.setRootNode(root);//設(shè)置根節(jié)點(diǎn)
mytree.render();//不要忘記render()下,不然不顯示哦
}
3. 展開子節(jié)點(diǎn)的代碼
/******************************************
展開節(jié)點(diǎn)
******************************************/
function myExpand(node){
if(node.id=='1'){
if(node.item(0)==undefined){
node.appendChild(new Ext.tree.TreeNode({
id:node.id+'1',
text:node.text+"的第一個(gè)兒子",
hrefTarget:"mainFrame",
listeners:{//監(jiān)聽
"click":function(node,e){
expand2(node)
}
}
}));
}
node.expand();
}else if(node.id=='2'){
node.appendChild(new Ext.tree.TreeNode({
id:node.id+'2',
text:node.text+"的第一個(gè)兒子",
hrefTarget:"mainFrame",
listeners:{//監(jiān)聽
"click":function(node){
expand2(node)
}
}
}));
}else{
alert(node.id+"沒有子部門了");
}
}
讀者可以自己運(yùn)行一下如上代碼,會(huì)發(fā)現(xiàn)如下現(xiàn)象:無論點(diǎn)擊“子公司1”多少次,只會(huì)列出“子公司1的第一個(gè)兒子”一個(gè)節(jié)點(diǎn),而每點(diǎn)擊一次“子公司2”,就會(huì)多出一個(gè)“子公司2的第一個(gè)兒子”節(jié)點(diǎn),這是為什么呢?
因?yàn)槊看吸c(diǎn)擊都會(huì)激發(fā)myExpand函數(shù),而“子公司1”上加了node.item(0)==undefined的判斷,這里明白了?
即:如果該部門下沒有子部門,則載入子部門,否則只展開,不重新載入。
要求生成一顆部門樹,初始只列出根部門
當(dāng)點(diǎn)擊一個(gè)部門節(jié)點(diǎn)時(shí),動(dòng)態(tài)載入該部門下的直屬子部門,并展開該部門節(jié)點(diǎn)
部門節(jié)點(diǎn)要求支持右鍵單擊事件,當(dāng)點(diǎn)擊右鍵時(shí),列出相關(guān)操作菜單
二. 關(guān)鍵類
這里主要涉及Ext JS的兩個(gè)類:
Ext.tree.TreeNode
Ext.menu.Menu
相關(guān)API可以參考:http://extjs.com/deploy/ext/docs/
三. 代碼示例
1. 先看一下測試頁面
復(fù)制代碼 代碼如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Reorder TreePanel</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../ext-all.js"></script>
<script type="text/javascript" src="reorder.js"></script>
<!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="../shared/examples.css" />
<link rel="stylesheet" type="text/css" href="../shared/lib.css" />
<script type="text/javascript">
/**************
onload事件
***************/
window.onload=function(){
createTree(3);
}
</script>
</head>
<body>
<script type="text/javascript" src="../shared/examples.js"></script>
<h1>現(xiàn)在要生成一顆動(dòng)態(tài)樹</h1>
<div id="container">
</div>
</body>
</html>
2. 再看一下生成樹的函數(shù)
復(fù)制代碼 代碼如下:
/***********************************
創(chuàng)建樹
by chb
************************************/
function createTree(n){
Ext.QuickTips.init();
var mytree=new Ext.tree.TreePanel({
el:"container",
animate:true,
title:"Extjs動(dòng)態(tài)樹",
collapsible:true,
enableDD:true,
enableDrag:true,
rootVisible:true,
autoScroll:true,
autoHeight:true,
width:"30%",
lines:true
});
//根節(jié)點(diǎn)
var root=new Ext.tree.TreeNode({
id:"root",
text:"集團(tuán)公司",
expanded:true
});
for(var i=0;i<n;i++){
var sub1=new Ext.tree.TreeNode({
id:i+1,
text:"子公司"+(i+1),
singleClickExpand:true,
listeners:{
//監(jiān)聽單擊事件
"click":function(node){
myExpand(node);
},
//監(jiān)聽右鍵
"contextmenu":function(node,e){
//列出右鍵菜單
menu=new Ext.menu.Menu([
{
text:"打開當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
myExpand(node);
}
},
{
text:"編輯當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
alert(node.id);
}
},
{
text:"刪除當(dāng)前節(jié)點(diǎn)",
icon:"list.gif",
handler:function(){
alert(node.id);
}
}]);
//顯示在當(dāng)前位置
menu.showAt(e.getPoint());
}
}
});
root.appendChild(sub1);
}
mytree.setRootNode(root);//設(shè)置根節(jié)點(diǎn)
mytree.render();//不要忘記render()下,不然不顯示哦
}
3. 展開子節(jié)點(diǎn)的代碼
復(fù)制代碼 代碼如下:
/******************************************
展開節(jié)點(diǎn)
******************************************/
function myExpand(node){
if(node.id=='1'){
if(node.item(0)==undefined){
node.appendChild(new Ext.tree.TreeNode({
id:node.id+'1',
text:node.text+"的第一個(gè)兒子",
hrefTarget:"mainFrame",
listeners:{//監(jiān)聽
"click":function(node,e){
expand2(node)
}
}
}));
}
node.expand();
}else if(node.id=='2'){
node.appendChild(new Ext.tree.TreeNode({
id:node.id+'2',
text:node.text+"的第一個(gè)兒子",
hrefTarget:"mainFrame",
listeners:{//監(jiān)聽
"click":function(node){
expand2(node)
}
}
}));
}else{
alert(node.id+"沒有子部門了");
}
}
讀者可以自己運(yùn)行一下如上代碼,會(huì)發(fā)現(xiàn)如下現(xiàn)象:無論點(diǎn)擊“子公司1”多少次,只會(huì)列出“子公司1的第一個(gè)兒子”一個(gè)節(jié)點(diǎn),而每點(diǎn)擊一次“子公司2”,就會(huì)多出一個(gè)“子公司2的第一個(gè)兒子”節(jié)點(diǎn),這是為什么呢?
因?yàn)槊看吸c(diǎn)擊都會(huì)激發(fā)myExpand函數(shù),而“子公司1”上加了node.item(0)==undefined的判斷,這里明白了?
即:如果該部門下沒有子部門,則載入子部門,否則只展開,不重新載入。
好了,就到這里吧,困了,就不詳細(xì)解釋了o(∩_∩)o...哈哈
您可能感興趣的文章:
- Div+CSS+JS樹型菜單,可刷新
- 利用Dojo和JSON建立無限級AJAX動(dòng)態(tài)加載的功能模塊樹
- js樹形控件腳本代碼
- JSP 動(dòng)態(tài)樹的實(shí)現(xiàn)
- jsTree樹控件(基于jQuery, 超強(qiáng)悍)[推薦]
- 選擇TreeView控件的樹狀數(shù)據(jù)節(jié)點(diǎn)的JS方法(jquery)
- Extjs入門之動(dòng)態(tài)加載樹代碼
- JS無限樹狀列表實(shí)現(xiàn)代碼
- 一個(gè)簡單的js樹形菜單
- Extjs中ComboBoxTree實(shí)現(xiàn)的下拉框樹效果(自寫)
- JS無限極樹形菜單,json格式、數(shù)組格式通用示例
- 用JS做的簡單的可折疊的兩級樹形菜單
- 使用js簡單實(shí)現(xiàn)了tree樹菜單
- 動(dòng)態(tài)加載dtree.js樹treeview(示例代碼)
- JS+CSS實(shí)現(xiàn)TreeMenu二級樹形菜單完整實(shí)例
- JS+CSS實(shí)現(xiàn)類似QQ好友及黑名單效果的樹型菜單
- js實(shí)現(xiàn)無限級樹形導(dǎo)航列表效果代碼
- 純javascript響應(yīng)式樹形菜單效果
相關(guān)文章
JS動(dòng)態(tài)給對象添加屬性和值的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫S動(dòng)態(tài)給對象添加屬性和值的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
?javascript數(shù)組中的lastIndexOf方法
這篇文章主要介紹了?javascript數(shù)組中的lastIndexOf方法,該方法可返回一個(gè)指定的字符串值最后出現(xiàn)的位置,在一個(gè)字符串中的指定位置從后向前搜索,下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-03-03
zTree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實(shí)例
下面小編就為大家?guī)硪黄獄Tree獲取當(dāng)前節(jié)點(diǎn)的下一級子節(jié)點(diǎn)數(shù)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
可視化埋點(diǎn)平臺(tái)元素曝光采集intersectionObserver思路實(shí)踐
這篇文章主要為大家介紹了可視化埋點(diǎn)平臺(tái)元素曝光采集的思路—intersectionObserver的實(shí)戰(zhàn)經(jīng)驗(yàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
javascript正則表達(dá)式基礎(chǔ)知識入門
很長時(shí)間沒看正則表達(dá)式了,碰巧今天用到,溫故知新了一把,這里記錄下來,分享給大家,都是些基礎(chǔ)的知識,重點(diǎn)給大家講解的是正則表達(dá)式中4種常用的方法,50% 的舉一反三練習(xí)中的原創(chuàng)。2015-04-04
JavaScript canvas實(shí)現(xiàn)九宮格切圖效果
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)九宮格切圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

