利用Ext Js生成动态树
今天在公司帮同事写了个用Ext Js生成动态树的Demo,在这里分享一下,也好供以后自己查阅。
一. 需求
- 要求生成一颗部门树,初始只列出根部门
- 当点击一个部门节点时,动态载入该部门下的直属子部门,并展开该部门节点
- 部门节点要求支持右键单击事件,当点击右键时,列出相关操作菜单
二. 关键类
这里主要涉及Ext JS的两个类:
- Ext.tree.TreeNode
- Ext.menu.Menu
相关API可以参考:http://extjs.com/deploy/ext/docs/
三. 代码示例
1. 先看一下测试页面
-
<html>
-
<head>
-
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
-
<title>ReorderTreePanel</title>
-
<linkrel="stylesheet"type="text/css"href="../../resources/css/ext-all.css"/>
-
<scripttype="text/javascript"src="../../adapter/ext/ext-base.js"></script>
-
<scripttype="text/javascript"src="../../ext-all.js"></script>
-
<scripttype="text/javascript"src="reorder.js"></script>
-
-
-
<linkrel="stylesheet"type="text/css"href="../shared/examples.css"/>
-
<linkrel="stylesheet"type="text/css"href="../shared/lib.css"/>
-
-
<scripttype="text/javascript">
- /**************
- onload事件
- ***************/
-
window.onload=function(){
- createTree(3);
- }
-
</script>
-
-
</head>
-
<body>
-
<scripttype="text/javascript"src="../shared/examples.js"></script>
-
<h1>现在要生成一颗动态树</h1>
-
<divid="container">
-
</div>
-
</body>
-
</html>
-
2. 再看一下生成树的函数
-
-
functioncreateTree(n){
-
- Ext.QuickTips.init();
-
varmytree=newExt.tree.TreePanel({
-
el:"container",
-
animate:true,
-
title:"Extjs动态树",
-
collapsible:true,
-
enableDD:true,
-
enableDrag:true,
-
rootVisible:true,
-
autoScroll:true,
-
autoHeight:true,
-
width:"30%",
-
lines:true
- });
-
-
varroot=newExt.tree.TreeNode({
-
id:"root",
-
text:"集团公司",
-
expanded:true
- });
-
-
for(vari=0;i<n;i++){
-
varsub1=newExt.tree.TreeNode({
- id:i+1,
-
text:"子公司"+(i+1),
-
singleClickExpand:true,
- listeners:{
-
-
"click":function(node){
- myExpand(node);
- },
-
-
"contextmenu":function(node,e){
-
-
menu=newExt.menu.Menu([
- {
-
text:"打开当前节点",
-
icon:"list.gif",
-
handler:function(){
- myExpand(node);
- }
- },
- {
-
text:"编辑当前节点",
-
icon:"list.gif",
-
handler:function(){
- alert(node.id);
- }
- },
- {
-
text:"删除当前节点",
-
icon:"list.gif",
-
handler:function(){
- alert(node.id);
- }
- }]);
-
- menu.showAt(e.getPoint());
- }
- }
- });
- root.appendChild(sub1);
- }
-
mytree.setRootNode(root);
-
-
mytree.render();
- }
3. 展开子节点的代码
-
-
functionmyExpand(node){
-
if(node.id=='1'){
-
if(node.item(0)==undefined){
-
node.appendChild(newExt.tree.TreeNode({
-
id:node.id+'1',
-
text:node.text+"的第一个儿子",
-
hrefTarget:"mainFrame",
-
listeners:{
-
"click":function(node,e){
- expand2(node)
- }
- }
- }));
- }
-
- node.expand();
-
-
}elseif(node.id=='2'){
-
node.appendChild(newExt.tree.TreeNode({
-
id:node.id+'2',
-
text:node.text+"的第一个儿子",
-
hrefTarget:"mainFrame",
-
listeners:{
-
"click":function(node){
- expand2(node)
- }
- }
- }));
-
}else{
-
alert(node.id+"没有子部门了");
- }
- }
读者可以自己运行一下如上代码,会发现如下现象:无论点击“子公司1”多少次,只会列出“子公司1的第一个儿子”一个节点,而每点击一次“子公司2”,就会多出一个“子公司2的第一个儿子”节点,这是为什么呢?
因为每次点击都会激发myExpand函数,而“子公司1”上加了node.item(0)==undefined的判断,这里明白了?
即:如果该部门下没有子部门,则载入子部门,否则只展开,不重新载入。
好了,就到这里吧,困了,就不详细解释了o(∩_∩)o...哈哈
分享到:
相关推荐
今天在公司帮同事写了个用Ext Js生成动态树的Demo,在这里分享一下,也好供以后自己查阅。
整个框架已经搭建成功,只要导入其中使用即可,欢迎大家多多下载
该系统采用Ext JS作为前端框架,Struts2和Hibernate作为后端框架,实现了物流企业从订单管理、货物管理、车辆管理到财务管理的全方位信息化管理。 系统主要功能如下: 1. 订单管理:支持订单的创建、修改、查询和...
Extjs在经过两年的发展,Ext JS从2.0版开始,越来越受用户欢迎,今年,Extjs不但推出3.0版本,而且还推出了Ext Core,准备在Web2.0网站开发中占一席之地,如在 Extjs2.x版本中为人所诟病的速度问题在ExtJs3.0中有所...
这种情况下,我们就可以既充分利用Java语言的开发优势降低Ajax应用开发的难度,加快Ajax应用的开发速度,为Ajax的大规模应用创造可能,又可以充分发挥Ajax技术的优势,创建更加动态和交互性更好的Web应用程序,提升...
删除任何.json , .yml ,或.js使用的文件导出函数到此目录和访问在嫩枝模板所得的数据{{ site.data['path/to/file.ext'] }} 由提供技术支持。 样式由编写, 在于 。 。 在构建时使用以便他们可以利用在构建时, ...
系统会把 APC_UPLOAD_PROGRESS域的值前面加上'upload_'生成钩子名称。在其它的php程序中就可以用apc_fetch()这个函数得到该文件的一系列信息了。假设APC_UPLOAD_PROGRESS的值是45c7f4d0b5f5b,那么在php中就可以这样...
justsoalt 用于在你的图片上加入alt标记,它可以利用模板一次为多张图片加入alt说明 calendarPopup 一个弹出日历表格,用以确保输入的日历是按照特定的格式进行输入的,主要特色包括:日历链接,按照需要的方式设定...
用于在你的图片上加入alt标记,它可以利用模板一次为多张图片加入alt说明 calendarPopup 一个弹出日历表格,用以确保输入的日历是按照特定的格式进行输入的,主要特色包括:日历链接,按照需要的方式设定日历的格式...
PrettyFaces优雅的解决了这个问题,包括诸如功能:网页装载行动,无缝的跟faces的导航整合,动态视图的ID分配和管理参数分析,无需配置,兼容其他JSF框架。P ... by zly06 2009-09-09 回复 (0) 相关博客 ant模板 ...
计算机应用技术 实用手册 Xnllz 2011.7.29 ...1.STANDARD CMOS SETUP(标准CMOS设定)用来设定日期、时间、软硬盘规格、工作类类型。...5.PNP/PCI Configurations 即插即用与PCI设备设定,一般为默认。...
25. 动态生成 TTabSheet or TUniTabSheet ........................................................................... 22 26. UniGUI 中如果获得 Session情况 ...................................................
当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法。 <br>You can block an IP address by using: 你可以使用以下命令封禁一个IP地址...